请问一下,多节点消费 kafka 如何做到串行消费

115 天前
 NoKey
就是有个场景,有个任务要处理,任务必须串行执行
为了保证任务下发后不丢失
打算借助 kafka 的持久化,把任务丢到 kafka 中
后台服务有多个节点,也就是多个节点在消费 kafka
怎么样才能做到串行消费 kafka 的消息呢?
就是说,多个节点排队消费,第一个节点拿到消息后,如果没处理完,其他节点不能继续消费
搞了好久都没实现
又不想用数据库存储然后定时读取的方式(这种方式肯定没问题)
想通过这个功能,学会 kakfa 的使用
请假一下各位大佬,基于 kafka 能不能实现这个想法呢?谢谢
2389 次点击
所在节点    Kafka
30 条回复
Trim21
115 天前
只用一个节点消费?
RihcardLu
115 天前
进队列前对任务进行一个 hash ,有时序性的扔在一起
7911364440
115 天前
给任务加个字增 id ,每个消费服务执行任务前校验一下顺序
crysislinux
115 天前
kafka 一个分区不就是顺序执行的么。你还想要啥
MeiJiayun
115 天前
指定 key ,key 相同会推送到相同分区,同一分区的消息有顺序
dddd1919
115 天前
给串行的每个节点定义一个 topic 和 topic 的串行顺序,每个节点执行器执行完成后把消息推送到下一个 topic
kur0d3s
115 天前
要求单实例顺序执行了, 那消费者多实例的意义是啥...
Wh1t3zZ
115 天前
"多个节点排队消费,第一个节点拿到消息后,如果没处理完,其他节点不能继续消费"

没看懂多个节点消费的意义是什么
NoKey
115 天前
@Wh1t3zZ 因为服务自己是多节点部署的,启动起来,kafka 就订阅消费了。。。
NoKey
115 天前
@crysislinux 消费节点是多个,我测试的,即便多个消费者在一个消费者组,第一个消费者拿到消息处理的过程中,第二条消息到来,也会被消费,这个时候,第一条消息和第二条消息就是并行在处理了
NoKey
115 天前
@Trim21 主要是服务是多节点部署,启动起来自然开始订阅消费
zt5b79527
115 天前
单个实例去消费不就完了,如果必须是多个实例,就去抢分布式锁,拿到锁的才能去消费
frank1256
115 天前
多节点抢锁,抢不到锁的 commit offset 要回退的,因为你第二个节点虽然拿不到锁,但已经消费到数据了
crysislinux
115 天前
@NoKey 消费者组和分区不是一个概念吧,你搞错了。
echoZero
115 天前
放同一个分区。之所有会出现多条消息并行处理,因为是批量拉取消费消息,这个是你的消费逻辑问题,看一下是不是消费逻辑并发处理拉取的消息了
zdt3476
115 天前
你给这个 topic 只分配一个 partition 就好了,这样多消费者就不起作用了
awalkingman
115 天前
@zt5b79527 正解
MoYi123
115 天前
kafka 在这起什么作用? rpc 调用就会导致任务丢失了?
Marinaaaa
114 天前
1. topic 单分区 ,多消费者, 这样再多消费者也就只有一个在工作。

2. 多分区,多消费者,任务投递的指定 key ,这样同样 key 的任务在同一个分区,也是被顺序消费的。

3. 分布式锁 , 抢到锁的去消费
NoKey
114 天前
@Marinaaaa 我现在用的是第二种,指定生成者往指定分区发消息,消费者就算只有一个,也有问题:我在消费方法中加了 sleep 来模拟处理数据耗时,第一条消息还在 sleep 的时候,第二条消息到来,也会进入处理阶段,也就是消费者相当于多线程的,不断的在消费。不知道这种情况如何处理

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

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

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

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

© 2021 V2EX