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

这篇具有很好参考价值的文章主要介绍了kafka如何动态消费新增topic主题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、解决痛点

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

二、组件能力

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

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

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

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

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

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

接入成功

三、核心设计点

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中处理业务逻辑文章来源地址https://www.toymoban.com/news/detail-420278.html

@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);
        }
    }
}

到了这里,关于kafka如何动态消费新增topic主题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Kafka系列之:记录一次Kafka Topic分区扩容,但是下游flink消费者没有自动消费新的分区的解决方法

    生产环境Kafka集群压力大,Topic读写压力大,消费的lag比较大,因此通过扩容Topic的分区,增大Topic的读写性能 理论上下游消费者应该能够自动消费到新的分区,例如flume消费到了新的分区,但是实际情况是存在flink消费者没有消费到新的分区 出现无法消费topic新的分区这种情况

    2024年02月14日
    浏览(50)
  • SpringBoot 2.2.5 整合RabbitMQ,实现Topic主题模式的消息发送及消费

    1、simple简单模式 消息产生着§将消息放入队列 消息的消费者(consumer) 监听(while) 消息队列,如果队列中有消息,就消费掉,消息被拿走后,自动从队列中删除(隐患 消息可能没有被消费者正确处理,已经从队列中消失了,造成消息的丢失)应用场景:聊天(中间有一个过度的服务器;p端,c端

    2024年02月02日
    浏览(44)
  • 全网最详细地理解Kafka中的Topic和Partition以及关于kafka的消息分发、服务端如何消费指定分区、kafka的分区分配策略(range策略和RoundRobin策略)

    最近在学习kafka相关的知识,特将学习成功记录成文章,以供大家共同学习。 首先要注意的是, Kafka 中的 Topic 和 ActiveMQ 中的 Topic 是不一样的。 在 Kafka 中, Topic 是一个存储消息的逻辑概念,可以认为是一个消息集合。每条消息发送到 Kafka 集群的消息都有一个类别。 物理上

    2024年01月25日
    浏览(41)
  • Kafka/Spark-01消费topic到写出到topic

    消费者代码 注意点 consumerConfigs是定义的可变的map的类型的,具体如下 consumerConfigs.put(ConsumerConfig.GROUP_ID_CONFIG , groupId)是为了不限制groupId特意写的传参 是使用自带的kafka工具类createDirectStream方法去消费kafak 的数据,详细参数解释如下 Subscribe传参需要指定泛型,这边指定string,

    2024年02月09日
    浏览(33)
  • kafka消费多个topic的使用

    我们在业务中难免遇到一个kafka消费多个topic的消息,本文帮助大家如何在业务中用一个类消费多个topic消息 配置类1

    2024年02月11日
    浏览(53)
  • Kafka - Topic 消费状态常用命令

    replication-factor:指定副本数量 partitions:指定分区 查看consumer group列表有新、旧两种命令,分别查看新版(信息保存在broker中)consumer列表和老版(信息保存在zookeeper中)consumer列表,因而需要区分指定bootstrap--server和zookeeper参数 这里同样需要根据新、旧版本的consumer,分别指

    2024年01月25日
    浏览(52)
  • Kafka某个Topic无法消费问题

    12月28日,公司测试环境Kafka的task.build.metadata.flow这个topic突然无法消费。 其他topic都正常使用,这个topic只有一个分区,并且只有一个消费者 首先登录服务器,运行kafka的cli命令,查看消费者组的详情。 由上图可以发现,task.build.metadata.flow这个topic,最新offset是2,但是当前o

    2024年02月03日
    浏览(49)
  • Flink实现同时消费多个kafka topic,并输出到多个topic

    1)代码使用的 flink版本为1.16.1 ,旧版本的依赖及api可能不同,同时使用了hutool的JSON工具类,两者均可自行更换; 2)本次编写的两个方案,均只适用于 数据源topic来自同一个集群 ,且kafka消费组相同,暂未研究flink的connect算子join多条流 代码涉及 Hadoop相关环境 ,若无该环境

    2023年04月20日
    浏览(85)
  • 自定义kafka客户端消费topic

    使用自定义的KafkaConsumer给spring进行管理,之后在注入topic的set方法中,开单线程主动订阅和读取该topic的消息。 后端服务不需要启动时就开始监听消费,而是根据启动的模块或者用户自定义监听需要监听或者停止的topic 使用的spring集成2.1.8.RELEASE的版本,在@KafkaListener注解中没

    2024年02月02日
    浏览(52)
  • kafka 基础概念、命令行操作(查看所有topic、创建topic、删除topic、查看某个Topic的详情、修改分区数、发送消息、消费消息、 查看消费者组 、更新消费者的偏移位置)

    kafka官网 Broker   一台kafka服务器就是一个broker,可容纳多个topic。一个集群由多个broker组成; Producer   生产者,即向kafka的broker-list发送消息的客户端; Consumer   消费者,即向kafka的broker-list订阅消息的客户端; Consumer Group   消费者组是 逻辑上的一个订阅者 ,由多个

    2024年02月01日
    浏览(57)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包