kafka 多线程消费是否必须手动提交 offset/partion 才能避免竞争

2021-07-27 21:59:20 +08:00
 akmonde

rt,我这边遇到个问题,需要 kafka 多线程消费数据。

已知同一个 groupid,能控制多个消费者竞争问题,不会出现同一条数据被多个消费者重复读取。

但是多个线程同时去读,是否必须手动提交 offset,auto_commit 不知道能否满足要求?

我在网上看到的 case,基本上是让本地建个临时 sqlite 库,根据 partion 和线程对应去消费,手动提交 offset 。

比如:https://www.cnblogs.com/lshan/p/11647485.html

我不知道最佳实践是怎样的?

各位大佬,很急在线等!

1519 次点击
所在节点    Kafka
5 条回复
billlee
2021-07-28 01:01:15 +08:00
每个 partition 只能被一个线程读取。自动提交 offset 只对非正常退出时丢数据有影响。
akmonde
2021-07-28 08:30:16 +08:00
@billlee 嗨,大佬,那我之前提出的记录 offset 和 partion 有必要么,还是每次手动提交 offset 就行。
JKeita
2021-07-28 09:58:25 +08:00
一个消费者多个线程?不同线程对应一个分区?这种应该只能手动控制了吧
akmonde
2021-07-28 18:04:18 +08:00
@JKeita 我就在琢磨,要是每次手动控制 offset,那每个 partion 的初始的 offset 咋设置?也不能 auto_offset_reset 每个都设置 0-100 随机来个?
billlee
2021-07-28 20:20:36 +08:00
@akmonde 就是两个模式嘛。如果用 kafka 提供的 commit 功能,不管是手动 commit 还是自动 commit,就不需要自己记录。如果自己维护,就要自己分配那个线程读取哪些 partition, 并做好 partitition id 和 offset 的记录。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/792137

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX