qidao123.com技术社区-IT企服评测·应用市场

标题: 【面试必备】一文讲清 Kafka 里的 Consumer Group 和 Offset 机制! [打印本页]

作者: 河曲智叟    时间: 2025-4-28 03:12
标题: 【面试必备】一文讲清 Kafka 里的 Consumer Group 和 Offset 机制!
不同的 Consumer Group 在消费同一个 Topic 时,它们的 offset 是彼此独立的,每个 Consumer Group 都会维护自己的一套 offset。如许 Kafka 允许多个业务系统独立消费相同的数据,而不会相互影响。

1. Consumer Group 和 Offset 关系


举个例子:

PartitionOffset(Group A)Offset(Group B)orders-0100250orders-1500600orders-2300400   表明:Group A 和 Group B 各自独立维护自己的 offset,Group A 可能比 Group B 早大概晚消费同一 Partition 的数据,但它们互不影响。
  
2. Kafka 把 Offset 存在哪里?

Kafka 默认把 offset 存储在一个内部 Topic:__consumer_offsets,这个 Topic 由 Kafka 内部管理,不会被平常业务消费。
Kafka 维护 Offset 的方式

Kafka 接纳 “Partition + Consumer Group” 作为 key 来存储 Offset:

示例
Kafka __consumer_offsets 里可能存储类似如许的数据:
  1. {
  2.   "topic": "orders",
  3.   "partition": 1,
  4.   "consumer_group": "Group_A",
  5.   "offset": 500
  6. }
复制代码
表示 Group_A 在 orders-1 分区消费到了 offset = 500
3. Offset 提交(Commit Offset)

Kafka 提供两种方式提交 Offset:

4. 既然 Offset 在 Kafka 里存着,Consumer 重启后会从哪里开始消费?

Kafka 提供了一个参数 auto.offset.reset 来决定 Consumer 启动时的行为:

示例
如果 Group_A 的某个 Consumer 崩溃并重启:


5. 还有其他存储 Offset 的方式吗?

是的,Kafka 也支持自定义 Offset 存储方式,比如:


6. 总结

问题答案不同 Consumer Group 共享 Offset 吗?不是,每个 Consumer Group 维护自己的 offsetKafka 默认在哪里存 offset?__consumer_offsets 这个内部 Topicoffset 何时提交?可以主动提交(默认),也可以手动提交Consumer 重启后从哪里消费?取决于 auto.offset.reset 设置可以不用 Kafka 存 Offset 吗?可以,应用可以把 offset 存在数据库等地方 如许一来,Kafka 里的 Consumer Group 和 Offset 机制 是不是更清楚了?

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4