kafka如何动态消费新增topic主题

一、解决痛点

使用spring-kafka客户端,每次新增topic主题,都需要硬编码客户端并重新发布服务,操作麻烦耗时长。kafkaListener虽可以支持通配符消费topic,缺点是并发数需要手动改并且重启服务 。对于业务逻辑相似场景,创建新主题动态监听可以用kafka-batch-starter组件

二、组件能力

1、新增topic名称为:auto.topic1(由于配置spring.kafka.consumer.prefix 为auto,因此只有auto前缀的topic,才会被组件动态监听。)

2、应用输出日志,监听到新增auto.topic1,并初始化客户端 (主题刷新间隔为10s)

3、发新的消息给auto.topic1,可以看到消费成功,不影响原有kafka客户端的消费

接入成功

三、核心设计点

1、动态接入消息,无需重新发布服务

2、适配spring-kafka配置,和生产运行中的spring-kafka客户端不冲突

四、接入步骤

1、引入maven依赖坐标

<dependency>
    <groupId>io.gitee.qrkcn</groupId>
    <artifactId>kafka-batch-starter</artifactId>
    <version>1.0.0</version>
</dependency>

2、客户端配置,适配spring-kafka原有的配置文件

spring:
  kafka:
    bootstrap-servers: 172.111.0.1:9092
    consumer:
      prefix: auto
      group-id: kafka-local1
      # 手动提交
      enable-auto-commit: false
      auto-offset-reset: latest
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      properties:
        auto.commit.interval.ms: 1000
        session.timeout.ms: 60000
        request.timeout.ms: 1000000
        max.poll.interval.ms: 300000   #默认5分钟 300000ms
        max.poll.records: 30   #默认500条

spring.kafka.consumer.prefix 配置说明:

  • 必填,topic名称前缀符合配置,才会动态监听

  • 不填为null,组件抛出自定义异常:Caused by: java.lang.InterruptedException: spring.kafka.consumer.prefix can not be null if use kafka-batch-starter

  • 填入""空字符串,则会动态监听所有主题

3、实现动态消费方法DynamicConsumerMethod

在processMessage中处理业务逻辑

@Component
@Slf4j
public class DynamicConsumerMethodImpl implements DynamicConsumerMethod {
    @Override
    public void processMessage(ConsumerRecords<String, String> records, String topicName) {
        for (ConsumerRecord<String, String> record : records) {
            String key = record.key();
            String value = record.value();
            int partition = record.partition();
            String topic = record.topic();
            log.info("consumer.topicName={},key={},value={}",topicName, key,value);
        }
    }
}

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值