kafka消费组和分区关系详解
原文链接:https://blog.csdn.net/weixin_42324471/article/details/121985212
消费组概念:
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,也可以选择手动创建位移主题 ,但是最好不要修改这个默认值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!