02 消费组与 offset
消费组与 offset
消费位置由消费者拉取推进,已提交位置由组协调器保存;先处理再提交可减少漏处理,却仍可能在崩溃后重复。
版本:Apache Kafka 4.4.0(KRaft);核实日期:2026-11-12。官方在线文档可能继续更新,源码链接固定到对应发布标签。图为原理抽象,省略非本页重点。
specification {
element actor { style { shape person; color amber } }
element system { style { color muted } }
element component { style { color primary } }
element storage { style { shape storage; color green } }
}
model {
c = actor '消费者'
g = component 'Group coordinator'
l = system '业务分区 leader'
biz = component '业务处理'
o = storage '__consumer_offsets'
}
views {
dynamic view index {
title '核心链路'
variant sequence
c -> g '加入组 / 心跳并获取分配'
c -> l '按本地 position 发 Fetch'
l -> c '返回记录并推进 position'
c -> biz '处理记录'
biz -> c '处理成功'
c -> g '提交下一条待消费 offset'
g -> o '写入提交位置'
g -> c '返回提交结果'
}
}
关键判断
- 同一普通消费组中,一个分区在稳定分配时交给一个成员;不同组可独立读取相同分区。
- position 是当前客户端读取进度,committed offset 是重启或重新分配时的恢复点,提交数值通常是下一条待处理位置。
- 新 consumer group 协议的分配由服务端协调,classic 协议的成员协作方式不同;本图只抽象共同职责,不混用具体报文。
边界
范围是普通消费组,不含 Share Group;业务副作用与 offset 不在同一事务时,崩溃恢复仍可能重复或遗漏,需幂等或事务设计。