消费组概念:
Consumer Group 是 Kafka 提供的可扩展且有容错性的消费者机制。一个组里面有多个消费者实例,这些消费者共享一个ID,称为Group ID。组内的所有消费者协调在一起来消费订阅主题(Subscribed Topics)的所有分区(Partition)
下面通过图来解释分组和分区的关系
假设某个主题,共有4各分区P0,P1,P2,P3,有两个消费组,消费组A共4各消费者:A0,A1,A2,A3, 消费组B共有2个分组:B0,B1
具体分配图如下
在这里插入图片描述
1、每个分区只能被一个消费组中的一个消费者所消费,
2、消费组中一个消费者可以消费多个分区。
3、多个消费组,每个消费组都可以消费topic中的所有数据,且消费位移之间互不影响。
4、一个消费组存在的消费者个数,大于分区数时,会出现消费组,未被分配到分区(如下图所示)。
在这里插入图片描述

消费位移简述。
Kafka 有新旧Consumer API 之分,老版本的 Consumer Group 把位移保存在 ZooKeeper 中,将位移保存在 ZooKeeper 外部系统的做法,最显而易见的好处就是减少了 Kafka Broker 端的状态保存开销,将服务器节点做成无状态的好处是可以自由地扩缩容,实现超强的伸缩性
kafka巨额吞吐量,会带来频繁读写,消费位移保存在zk中,会大量消耗集群性能,所以0.9版本后将消费位移保存到broker上的一个内部主题__consumer_offsets

保存在broker的优点:
满足频繁写入
可以持久化保存

新版本 Consumer 的位移管理机制其实就是将 Consumer 的位移数据作为一条条普通的 Kafka 消息,提交到 __consumer_offsets 中。位移主题就是普通的 Kafka 主题,可以手动地创建它、修改它,甚至是删除它。

位移主题有特定的消息格式,不可以随便向该主题发送消息

位移主题的key:<Group ID,主题名,分区名>
value保存的是具体的位移数值和相关元数据
其它两种格式:

用于保存Consumer Group信息的消息(不常见)
用于删除Group过期位移甚至删除group的消息,消息体是 null
Kafka集群中第一consumer启动时会创建位移主题,默认是分区50,副本数是3,也可以选择手动创建位移主题 ,但是最好不要修改这个默认值

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐