栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Kafka集群消费和广播消费的实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Kafka集群消费和广播消费的实现

Kafka消费模型

同一个消费组者的多个消费者实例会分别消费同一个topic下不同分区的数据,在消费者充足的条件下,每个分区最多也只有一个消费者实例;当消费者数量少于分区数量时,某个消费者会同时对应多个分区。

所以当某个topic下消息量激增时,如果只增加消费者实例数量可能并不能达到较好的效果,因为多余分区数的消费实例是空闲的,因此需要同时扩容分区数和消费者实例数量才能达到较好的效果

集群消费

默认情况下Kafka中同一个topic下的消息对于某一个消费组来说是集群消费模式,也就是只会被组内一个消费实例所消费。

广播消费

同一个topic下的消息被多个消费者消费称为广播消费.由于Kafka默认是集群消费模式,所以广播消费的实现方式就是为广播消费的多个应用实例都设置不同的GroupId即每个实例都是单独的消费组.

@KafkaListener注解的GroupId属性支持SpEL表达式,可以通过这个实现每个应用实例都是单独的消费组,进而实现广播消费。

下面表达式指的是取值java.util.UUID这个类的randomUUID方法,当然也可以通过后缀当前机器ip的方式实现动态groupId

@KafkaListener(topics = {"topic"}, properties = {"auto.offset.reset=latest"},
            groupId = "consumerGroup-" + "#{T(java.util.UUID).randomUUID()}")
避坑指南

由于是通过动态设置GroupId的方式来实现广播消费,所以当服务重启时GroupId就会改变,消费组改变会导致原先的消费进度丢失,因此需要正确配置 auto.offset.reset 参数。配置为 earliest 会有重复消费的可能,需要实现消费逻辑幂等。配置为 latest 会有漏消费的可能,开发中需要结合实际业务场景进行配置和实现程序幂等。
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/677879.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号