springboot整合kafka|20240202

1、@EnableKafka

用于使@KafkaListener生效

2、@KafkaListener(id = "consumer8", topics = "test2")

3、引入jar包

        <!--引入kafak和spring整合的jar-->
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
            <version>2.2.7.RELEASE</version>
        </dependency>

4、配置项

spring:
  kafka:
    # 指定kafka 代理地址,可以多个
    bootstrap-servers: 172.16.15.30:9092
    consumer:
      auto-offset-reset: earliest
      enable-auto-commit: true
      auto-commit-interval: 100
      properties:
        max:
          poll:
            interval:
              ms: 600000
      max-poll-records: 2

对应类:org.springframework.boot.autoconfigure.kafka.KafkaProperties

是springboot的自动配置类

5、使用ACk机制确认消费(手动提交)

只需简单的三步即可:

  1. 设置ENABLE_AUTO_COMMIT_CONFIG=false,禁止自动提交
  2. 设置AckMode=MANUAL_IMMEDIATE
  3. 监听方法加入Acknowledgment ack 参数

    @KafkaListener(id = "consumer10", topics = "test2")
    public void consumerListener(ConsumerRecord<String, String> record, Acknowledgment ack) {

        System.out.println("topic.test receive : " + record.toString());
        ack.acknowledge();

    }

 (75条消息) Spring Boot 整合——kafka消费模式AckMode以及手动消费_大风的博客-CSDN博客_ack-mode

spring-kafka之KafkaListener注解深入解读 - Enast - 博客园 (cnblogs.com)

6、消费端可靠性保证:

不重复消费;不缺失消费 

(75条消息) kafka9重复消费问题解决_龙腾四海365的专栏-CSDN博客

7、源码

public @interface KafkaListener {
   /**

    * 消费者的id,当GroupId没有被配置的时候,默认id为GroupId

    */

   String id() default "";
   /**

    * 监听容器工厂,当监听时需要区分单数据还是多数据消费需要配置containerFactory      属性

    */

   String containerFactory() default "";

   /**

    * 需要监听的Topic,可监听多个,和 topicPattern 属性互斥
*/

   String[] topics() default {};

   /**

    * 需要监听的Topic的正则表达。和 topics,topicPartitions属性互斥
    */

   String topicPattern() default "";

   /**

    * 可配置更加详细的监听信息,必须监听某个Topic中的指定分区,或者从offset为200的偏移量开始监听,可配置该参数, 和 topicPattern 属性互斥
    */

   TopicPartition[] topicPartitions() default {};

   /**

    *侦听器容器组 

    */

   String containerGroup() default "";

   /**

    * 监听异常处理器,配置BeanName

    */

   String errorHandler() default "";

   /**

    * 消费组ID 

    */

   String groupId() default "";

   /**

    * id是否为GroupId

    */

   boolean idIsGroup() default true;

   /**

    * 消费者Id前缀

    */

   String clientIdPrefix() default "";

   /**

    * 真实监听容器的BeanName,需要在 BeanName前加 "__"

    */

   String beanRef() default "__listener";
}

8、使用ConsumerRecord类消费

使用ConsumerRecord类接收有一定的好处,ConsumerRecord类里面包含分区信息、消息头、消息体等内容,如果业务需要获取这些参数时,使用ConsumerRecord会是个不错的选择。如果使用具体的类型接收消息体则更加方便,比如说用String类型去接收消息体。

==========20240202======================

1、jar包

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

2、配置

spring:
  kafka:
    bootstrap-servers: 171.1.1.17:9092,112.11.1.21:9092,171.11.319.21:9092
    consumer:
      group-id: testGroup
      auto-offset-reset: earliest
      enable-auto-commit: true
      auto-commit-interval: 100
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer

3、

    @KafkaListener(topics = {"qqqq"})
    public void kafkaData(ConsumerRecord<String,String> message) {
        System.out.println(message.value());
    }

4、数据入队列时间

ConsumerRecord<String, String> message;message.timestamp()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值