[Kafka] 求助, 同一个服务如何组播消费 kafka 某个 topic 的消息呢?

2020-08-21 09:20:30 +08:00
 BBCCBB

我现在用的是启动的时候动态生成 groupId, 比如 name + uuid 的方式

但是这样重启后就会导致原来的 consumerGroup 对应的实例都被销毁了.但 kafka 里依然存在原来的 consumerGroup, 监控上看已经被销毁的 consumerGroup 也会发现堆积越来越严重, 有谁知道正确的使用姿势吗??

不胜感激

😢

2932 次点击
所在节点    Kafka
31 条回复
sampeng
2020-08-21 12:42:26 +08:00
@j2gg0s 嗯。然后磁盘就爆了…
BBCCBB
2020-08-21 12:42:59 +08:00
@j2gg0s 业务场景你都不清楚你瞎 bb 个毛.
BBCCBB
2020-08-21 12:43:55 +08:00
im 推消息, 量小, 所以还不想做路由中心. 所以采用广播.
j2gg0s
2020-08-21 12:44:09 +08:00
@sampeng kafka 的磁盘被爆炸了?
rockyou12
2020-08-21 13:24:00 +08:00
我觉得最好用其它 mq,kafka 本来就不适合这种场景,你这业务看起来也不需要持久化,redis 的 sub/pub 可能都够了
lwldcr
2020-08-21 14:38:37 +08:00
你这个问题 加一个预处理步骤就可以了吧。

比如你一组应用有 10 个实例,那你提前分配好 groupId 名字,如 cg_1, cg_2,..., 然后存到一个地方:DB 、Redis 等

然后每个应用实例启动时 去存储的地方请求分配一个 groupId,用这个 groupId 启动 kafka 消费服务不就完事了
JKeita
2020-08-21 15:07:03 +08:00
固定 group id 每次启动清除 offset 怎样?
yty2012g
2020-08-21 16:56:06 +08:00
固定 group id,每次设置 offset 到最新应该就可以满足
IamNotShady
2020-08-21 19:45:51 +08:00
redis 的 pub/sub 不香吗?
timonwong
2020-08-21 20:39:39 +08:00
不要用 High Level Consumer API 就完了,之前用 go 写了一个,也用到了线上一年,不过不保证无 bug

https://github.com/imperfectgo/kafkasub
timonwong
2020-08-21 20:48:13 +08:00
原理是手动维护 offset,如果程序不死 retry 的时候保持 offset,程序死了从最新的来,可以按照自己的需求来调整。

不过有一点要注意的真的是 IM 的话,因为 kafka 的 partition reblance IO 相当大,可能造成非常大的 E2E 的 latency,这点要注意(虽然可以通过配置限制 IO 来绕过)。 总的来说,其实不适合 IM 这个场景

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

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

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

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

© 2021 V2EX