Spring Boot集成kafka的相关配置

这篇具有很好参考价值的文章主要介绍了Spring Boot集成kafka的相关配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引入依赖:

额外依赖只需要这一个,kafka-client 不是springboot 的东西,那是原生的 kafka 客户端, kafka-test也不需要,是用代码控制broker的东西。

<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
</dependency>

yml配置:

也可以用java类Config 方式配置,如果没有特殊要求,可以只用spring配置的方式

server:
  port: 8080
spring:
  kafka:
	# Kafka服务器,支持集群
    bootstrap-servers: 127.0.0.1:9092,127.0.0.2:9092
	# 生产者配置
    producer:
      # 消息发送重试次数,注意会引起重复消费,消费者需要做幂等
      retries: 3
      # acks=0 : 生产者在成功写入消息之前不会等待任何来自服务器的响应。
      # acks=1 : 只要集群的首领节点收到消息,生产者就会收到一个来自服务器成功响应。
      # acks=all :只有当所有参与复制的节点全部收到消息时,生产者才会收到一个来自服务器的成功响应。
      # 开启事务时,必须设置为all
      acks: all
      # 当有多个消息需要被发送到同一个分区时,生产者会把它们放在同一个批次里。该参数指定了一个批次可以使用的内存大小,按照字节数计算。
      batch-size: 16384
      # 生产者内存缓冲区的大小。
      buffer-memory: 1024000
      # 键的序列化方式
	  key-serializer: org.apache.kafka.common.serialization.StringSerializer
      # 值的序列化方式
	  value-serializer: org.apache.kafka.common.serialization.StringSerializer
	# 消费者配置
    consumer:
	  # 消费组ID,同一个消费组不会重复消费数据
      group-id: testGroup
      # 自动提交的时间间隔 在spring boot 2.X 版本中这里采用的是值的类型为Duration 需要符合特定的格式,如1S,1M,2H,5D
      #auto-commit-interval: 1S
      # 该属性指定了消费者在读取一个没有偏移量的分区或者偏移量无效的情况下该作何处理:
      # earliest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费分区的记录
      # latest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据(在消费者启动之后生成的记录)
      # none:当各分区都存在已提交的offset时,从提交的offset开始消费;只要有一个分区不存在已提交的offset,则抛出异常
      auto-offset-reset: latest
      # 是否自动提交偏移量,默认值是true,为了避免出现重复数据和数据丢失,可以把它设置为false,然后手动提交偏移量
      enable-auto-commit: false
      # 键的序列化方式
	  key-serializer: org.apache.kafka.common.serialization.StringSerializer
      # 值的序列化方式
	  value-serializer: org.apache.kafka.common.serialization.StringSerializer
      # 这个参数定义了poll方法最多可以拉取多少条消息,默认值为500。如果在拉取消息的时候新消息不足500条,那有多少返回多少;如果超过500条,每次只返回500。
      # 这个默认值在有些场景下太大,有些场景很难保证能够在5min内处理完500条消息,
      # 如果消费者无法在5分钟内处理完500条消息的话就会触发reBalance,
      # 然后这批消息会被分配到另一个消费者中,还是会处理不完,这样这批消息就永远也处理不完。
      # 要避免出现上述问题,提前评估好处理一条消息最长需要多少时间,然后覆盖默认的max.poll.records参数
      # 注:需要开启BatchListener批量监听才会生效,如果不开启BatchListener则不会出现reBalance情况
      max-poll-records: 3
    properties:
      # 两次poll之间的最大间隔,默认值为5分钟。如果超过这个间隔会触发reBalance
      max:
        poll:
          interval:
            ms: 600000
      # 当broker多久没有收到consumer的心跳请求后就触发reBalance,默认值是10s
      session:
        timeout:
          ms: 10000
    listener:
      # 在侦听器容器中运行的线程数,一般设置为 机器数*分区数
      concurrency: 4
      # 自动提交关闭,需要设置手动消息确认
      ack-mode: manual_immediate
      # 消费监听接口监听的主题不存在时,默认会报错,所以设置为false忽略错误
      missing-topics-fatal: false
      # 两次poll之间的最大间隔,默认值为5分钟。如果超过这个间隔会触发reBalance
      poll-timeout: 600000
	  #批量提交
	  #      type: batch

业务代码:

  1. 简单生产

    @RestController
    public class kafkaProducer {
    
        @Autowired
        private KafkaTemplate<String, Object> kafkaTemplate;
    
    
        @GetMapping("/kafka/normal/{message}")
        public void sendNormalMessage(@PathVariable("message") String message) {
            kafkaTemplate.send("testTopic", message);
        }
    }
    
  2. 简单消费

注意加上@Component,被spring管理监听才有效

@Component
public class KafkaConsumer {

    //监听消费
    @KafkaListener(topics = {"testTopic"})
    public void onNormalMessage(ConsumerRecord<String, Object> record) {
        System.out.println("简单消费:" + record.topic() + "-" + record.partition() + "=" +
                record.value());
    }

}

主题使用配置的方式:

  1. 在yml配置里加上topic

    server:
      port: 8080
    spring:
      kafka:
    	# Kafka服务器,支持集群
        bootstrap-servers: 127.0.0.1:9092,127.0.0.2:9092
    	# 自定义配置
        myconfig:
          topic: testTopic
  2. 简单生产+配置主题

    @RestController
    public class kafkaProducer {
    
        @Autowired
        private KafkaTemplate<String, Object> kafkaTemplate;
    	@Value("${spring.kafka.myconfig.topic}")
    	private String topic;
    
        @GetMapping("/kafka/normal/{message}")
        public void sendNormalMessage(@PathVariable("message") String message) {
            kafkaTemplate.send(topic, message);
        }
    }
  3. 简单消费+配置主题

注意这里不能用@Value注解的方式,会报错

@Component
public class KafkaConsumer {

    //监听消费
    @KafkaListener(topics = {"${spring.kafka.myconfig.topic}"})
    public void onNormalMessage(ConsumerRecord<String, Object> record) {
        System.out.println("简单消费:" + record.topic() + "-" + record.partition() + "=" +
                record.value());
    }

}

如果是多个主题需要消费, 可以使用Spring的SpEl表达式

server:
  port: 8080
spring:
  kafka:
	# Kafka服务器,支持集群
    bootstrap-servers: 127.0.0.1:9092,127.0.0.2:9092
	# 自定义配置
    myconfig:
      topic: testTopic1,testTopic2
@KafkaListener(topics = {"#{'${spring.kafka.myconfig.topic}'.split(',')}"})
@Component
public class KafkaConsumer {

    //监听消费
    @KafkaListener(topics = {"#{'${spring.kafka.myconfig.topic}'.split(',')}"})
    public void onNormalMessage(ConsumerRecord<String, Object> record) {
        System.out.println("简单消费:" + record.topic() + "-" + record.partition() + "=" +
                record.value());
    }

}

 Kafka数据重复和数据丢失的解决方案_kafka相同数据_谢小涛的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-725664.html

到了这里,关于Spring Boot集成kafka的相关配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring Boot】集成Kafka实现消息发送和订阅

    最近忙着搞低代码开发,好久没新建spring项目了,结果今天心血来潮准备建个springboot项目 注意Type选Maven,java选8,其他默认 点下一步后完成就新建了一个spring boot项目,配置下Maven环境,主要是settings.xml文件,里面要包含阿里云仓库,不然可能依赖下载不下来 在maven配置没问

    2024年02月09日
    浏览(48)
  • 从零开始学Spring Boot系列-集成Kafka

    Apache Kafka是一个开源的分布式流处理平台,由LinkedIn公司开发和维护,后来捐赠给了Apache软件基金会。Kafka主要用于构建实时数据管道和流应用。它类似于一个分布式、高吞吐量的发布-订阅消息系统,可以处理消费者网站的所有动作流数据。这种动作流数据包括页面浏览、搜

    2024年03月21日
    浏览(59)
  • 在Spring Boot微服务集成Kafka客户端(spring-kafka)操作Kafka

    记录 :457 场景 :在Spring Boot微服务集成Kafka客户端spring-kafka-2.8.2操作Kafka。使用Spring封装的KafkaTemplate操作Kafka生产者Producer。使用Spring封装的@KafkaListener操作Kafka的消费者Consumer。 版本 :JDK 1.8,Spring Boot 2.6.3,kafka_2.12-2.8.0,spring-kafka-2.8.2。 Kafka安装 :https://blog.csdn.net/zhangbeizhen1

    2024年02月09日
    浏览(57)
  • kafka--技术文档--spring-boot集成基础简单使用

            查阅了很多资料了解到,使用了spring-boot中整合的kafka的使用是被封装好的。也就是说这些使用其实和在linux中的使用kafka代码的使用其实没有太大关系。但是逻辑是一样的。这点要注意! 核心配置为: 如果在下面规定了spring-boot的版本那么就不需要再使用版本号,如

    2024年02月11日
    浏览(46)
  • 在Spring Boot微服务集成kafka-clients操作Kafka集群

    记录 :463 场景 :在Spring Boot微服务集成kafka-clients-3.0.0操作Kafka集群。使用kafka-clients的原生KafkaProducer操作Kafka集群生产者Producer。使用kafka-clients的原生KafkaConsumer操作Kafka集群的消费者Consumer。 版本 :JDK 1.8,Spring Boot 2.6.3,kafka_2.12-2.8.0,kafka-clients-3.0.0。 Kafka集群安装 :https://bl

    2024年02月09日
    浏览(51)
  • 使用Spring Boot集成中间件:Kafka的高级使用案例讲解

    在实际应用中,Kafka作为一种强大的分布式消息系统,广泛应用于实时数据处理和消息传递。本文将通过一个全面的使用案例,详细介绍如何使用Spring Boot集成Kafka,并展示其在实际场景中的应用。 在开始之前,我们需要确保已经完成以下准备工作: 安装并启动Kafka集群 创建

    2024年02月01日
    浏览(51)
  • 在Spring Boot微服务集成Kafka客户端(kafka-clients)操作Kafka

    记录 :459 场景 :在Spring Boot微服务集成Kafka客户端kafka-clients-3.0.0操作Kafka。使用kafka-clients的原生KafkaProducer操作Kafka生产者Producer。使用kafka-clients的原生KafkaConsumer操作Kafka的消费者Consumer。 版本 :JDK 1.8,Spring Boot 2.6.3,kafka_2.12-2.8.0,kafka-clients-3.0.0。 Kafka安装 :https://blog.csdn.ne

    2024年02月12日
    浏览(51)
  • spring boot配置双Kafka方法

    第一步:application.yml的配置 第二步:配置config 注意!注意!注意!!!代码中的一些字段名自己改一下。xxxx之类的换成自己的就行 第三步: 直接在你要用到的类中直接引用就行。 跟着以上三步走就可以简单的配置两个Kafka了,还有跟高级的spring切面切点的方法作者还没有

    2024年02月11日
    浏览(41)
  • Spring Boot配置多个Kafka数据源

    application.properties配置文件如下 1.第一个kakfa 2.第二个kakfa 备注: 生产者消费者代码参考链接,开发同学需要以实际情况按要求自己变更下代码即可: Spring Boot 集成多个 Kafka_springboot集成多个kafka_//承续缘_纪录片的博客-CSDN博客

    2024年02月07日
    浏览(73)
  • Spring boot 集成 Skywalking 配置 || Skywalking 打不开【已解决】

    Apache SkyWalking 如果下载太慢,建议复制下载链接, 然后用下载器下载 ,比如某雷。 ​ 打开apm-bin 里的webapp 修改port ​ ​ 这样就解决了端口冲突问题。 ​  ​ ​   ​ -javaagent:D:testxunleiapache-skywalking-java-agent-8.10.0skywalking-agentskywalking-agent.jar //这个是你自己skywalking-agent.j

    2024年02月14日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包