Kafka 的 Consumer Group 解读

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

作为一份笔记,本文再次梳理一下 Kafka 的 Consumer Group。我们知道,一个 Topic 往往会有多个 Partition,一条消息只会被写到一个 Kafka 的 Partition 中,那 Consumer 是怎么消费 Message 的呢? Consumer Group 又从中起到了什么作用呢?

Consumer Group 与 Consumer 到底有何不同?

首先,我们必须要非常清楚地明确一点:Consumer Group 才是消费一个 Topic 的“独立单位”,什么意思呢?就是说:一个 Consumer Group 才是一个通常意义上和 Consumer Client,它下面的 Consumer 实例是作为一个整体消费且只消费一遍 Topic 里的消息,而不是每一个 Consumer 独立消费一遍。当然,如果一个 Consumer Group 只有一个 Consumer,就没有区别了。

这样的话,一个 Consumer Group 下的多个 Consumer 是怎么分配消息的呢?一条消息投递到 Kafka 中究竟会被哪个 Consumer 读取?这中间的具体逻辑是什么呢?下图给出个非常清晰的解释:(摘抄自 Kafka The Definitive Guide, 2nd Edition ):

Kafka 的 Consumer Group 解读,大数据专题,kafka,consumer,group,关系,区别

下图同理:
Kafka 的 Consumer Group 解读,大数据专题,kafka,consumer,group,关系,区别

上图中 Consumer Group 中有三个 Consumer 实例,Topic 中有四个分区,Kafka 的安排是:其中两个 Consumer 各自读取一个 Partition,剩下的一个 Consumer 读取其余两个 Partition。所以,你会看到:没有一个 Consumer 能读全所有的消息!大家更像是在分头消化各自的“责任田”。下图是以两个 Consumer Group 为例,再次描述了同样的逻辑:

Kafka 的 Consumer Group 解读,大数据专题,kafka,consumer,group,关系,区别

下面的两张图依然是描述了这个事实:

Kafka 的 Consumer Group 解读,大数据专题,kafka,consumer,group,关系,区别
Kafka 的 Consumer Group 解读,大数据专题,kafka,consumer,group,关系,区别

根据 Consumer Group 的工作特点,我们不难看出:

  1. 一个 Partition 只会被一个 Consumer Group 中的一个 Consumer 实例消费 (不会有同 Group 的两个 Consumer 重复消费一条消息)

  2. 一个 Consumer Group 的 一个 Consumer 实例可能会消费一个 Partition,也可能会消费两个或两个以上的 Partition,还有可能一个 Partition 都不消费,这取决于 Partition 和 Consumer 的数量!以下是我们说的三种可能情形的示意图:

  • Case 1:一个 Consumer Group 只有一个 Consumer,该 Consumer 能读取到全部消息

Kafka 的 Consumer Group 解读,大数据专题,kafka,consumer,group,关系,区别

  • Case 2:一个 Consumer Group 有多个 Consumer,Consumer 均分 Partition,每个 Consumer 都读取一部分消息

Kafka 的 Consumer Group 解读,大数据专题,kafka,consumer,group,关系,区别

  • Case 3:一个 Consumer Group 的 Consumer 数量超过了 Partition 的数量,部分 Consumer 因未分配到 Partition,一条消息也不会读到

Kafka 的 Consumer Group 解读,大数据专题,kafka,consumer,group,关系,区别

Kafka 为什么要设计 Consumer Group 而不是直接以 Consumer 为单位读取 Message?

Kafka 设计 Consumer Group 的意图应该不难揣测,这样做显然是让 Topic 从只能由一个 Consumer 消费变成了:可以多个 Consumer 消费并行消费且还不用担心有重复数据,这样能提升消费端的整体吞吐能力。不过,要注意的是:Kafka 只能保证单个分区内的消息是按产生的先后顺序排列的,在多分区下,无法从整体上保证消息的有序性,所以,当一个 Consumer Group 下有多个 Consumer 一起读取消息时,是不能保证消息的时序性的!

另外由于kafka目前只提供单个分区内的消息顺序,而不会维护全局消息顺序,因此如果用户要实现topic全局消息顺序,就只能通过让每个consumer group下只包含一个consumer实例的方式来间接实现的。

Consumer Group 的相关操作

1. 列出某个 Topics 下的所有 consumer group

kafka-consumer-groups.sh --bootstrap-server $KAFKA_BOOTSTRAP_SERVERS --list

2. 查看某个 Consumer Group 的详细信息

kafka-consumer-groups.sh --bootstrap-server $KAFKA_BOOTSTRAP_SERVERS --describe --group console-consumer-76923

3. 重置偏移量

kafka-consumer-groups.sh --bootstrap-server $KAFKA_BOOTSTRAP_SERVERS --topic 'osci.mysql-server-3.inventory.orders' --group console-consumer-76923 --reset-offsets --to-earliest --execute

小结

最后,我们再简单总结一下:

Kafka中的每一个Consumer都归属于一个特定的Consumer Group,如果不指定,那么所有的Consumer都属于同一个默认的 Consumer Group。Consumer Group 由一个或多个Consumer组成,同一个Consumer Group中的Consumer对同一条消息只消费一次。每个 Consumer Group 都有一个唯一的ID,即Group ID,也称之为 Group Name。Consumer Group 内的所有 Consumer 协调在一起订阅一个Topic的所有Partition,且每个Partition只能由一个 Consumer Group中的一个Consumer进行消费。

参考资料

https://www.luozhiyun.com/archives/260

https://www.conduktor.io/kafka/kafka-consumer-groups-and-consumer-offsets/

https://medium.com/javarevisited/kafka-partitions-and-consumer-groups-in-6-mins-9e0e336c6c00文章来源地址https://www.toymoban.com/news/detail-807570.html

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

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

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

相关文章

  • kafka消费者报错Offset commit ......it is likely that the consumer was kicked out of the group的解决

    2022年10月份接到一个小功能,对接kafka将数据写到数据库,开始的需求就是无脑批量insert,随着时间的推移,业务需求有变更,kafka的生产消息频次越来越高,到今年7月份为止就每秒会有几十条甚至上百条,然后消费消息的代码就报错: Caused by: org.apache.kafka.clients.consumer.Com

    2024年02月07日
    浏览(42)
  • kafka-consumer-groups.sh

    通过 kafka-consumer-groups.sh 脚本查看或变更消费组的信息。 查看消费者组信息 查看指定消费者组的消费位移 消费组一共有 Dead 、Empty 、PreparingRebalance 、CompletingRebalance 、Stable 这几种状态,正常情况下, 一个具有消费者成员的消费组的状态为Stable 。可以通过 state 参数来查看消

    2024年02月06日
    浏览(34)
  • Kafka中Consumer源码解读

    本课程的核心技术点如下: 1、consumer初始化 2、如何选举Consumer Leader 3、Consumer Leader是如何制定分区方案 4、Consumer如何拉取数据 5、Consumer的自动偏移量提交 从KafkaConsumer的构造方法出发,我们跟踪到核心实现方法 这个方法的前面代码部分都是一些配置,我们分析源码要抓核心

    2024年02月09日
    浏览(27)
  • kafka-consumer-groups.sh消费者组管理

      先调用 MetadataRequest 拿到所有在线Broker列表 再给每个Broker发送 ListGroupsRequest 请求获取 消费者组数据。 查看指定消费组详情 --group 查看所有消费组详情 --all-groups 查询消费者成员信息 --members 查询消费者状态信息 --state 删除指定消费组 --group 删除所有消费组 --all-groups 想要

    2024年02月03日
    浏览(31)
  • kafka启用SASL认证后使用kafka-consumer-groups.sh查看消费组报错的问题

    解决SASL认证类型kafka在使用kafka-consumer-groups.sh查看消费组数据时,报以下异常的问题 解决方案: 进入docker容器,非docker部署进入kafka安装地址即可: 进入容器 docker exec -it kafka容器ID bash 进入kafka的配置config文件夹: cd   /home/zk/kafka_2.11-2.1.1/config 执行命令: 输入内容并保存:

    2024年02月07日
    浏览(30)
  • 【Kafka】Kafka consumer lag 为负数

    最近对Kafka 集群部署了 Kafka_exporter 监控,并集成了 granfana 图标展示。 发现 Consumer Group Lag 有时候为负数。 于是进行一番查询,并总结整理下。 从下图可以看出, consumer group 值有时候出现负数的情况。 消息过期了(超过默认7天),已经被清理掉了,这时候 topic 最新的 end

    2024年02月13日
    浏览(42)
  • 简单聊聊Kafka的Consumer

    我们知道消息队列一般有两种实现方式,(1)Push(推模式) (2)Pull(拉模式),那么 Kafka Consumer 究竟采用哪种方式进行消费的呢? 其实 Kafka Consumer 采用的是主动拉取 Broker 数据进行消费的即 Pull 模式 。这两种方式各有优劣,我们来分析一下: 1)、为什么不采用Push模式?**如果是选择

    2024年01月15日
    浏览(27)
  • kafka之消费者(Consumer)

    1、kafka消费者消费方式         kafka 的消费者(Consumer)采用 pull 的方式主动从 broker 中拉取数据,这种不足之处会有:当 broker 中没有消息时,消费者会不断循环取数据,一直返回空数据。 2、消费者组 Consumer Group(CG):消费者组,由多个consumer组成。形成一个消费者组

    2024年01月20日
    浏览(32)
  • Kafka整理-Consumer(消费者)

    在Apache Kafka中,消费者(Consumer)是负责从Kafka的主题(Topics)读取数据的客户端应用程序。Kafka消费者的主要特点和工作原理如下: 1、订阅主题: 消费者可以订阅一个或多个Kafka主题,并从中读取数据。 2、消费者群组(Consumer Groups): 消费者可以组成消费者群组。在一个

    2024年04月10日
    浏览(40)
  • kafka-consumer-消费者代码实例

    目录 1 消费一个主题 2 消费一个分区 3 消费者组案例 消费topic为first的消息。 应用场景:当生产者将所有消息发往特定的某个主题分区。 消费first主题0号分区代码: 测试同一个主题的分区数据,只能由一个消费者组中的一个消费者进行消费。 创建三个消费者对某一分区进行

    2024年02月11日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包