kafka 数据顺序性

主要思路:相同key值的消息写入同一个partition(partition内的消息是有序的),一个partition的消息只会被一个消费者消费。

如果一个消费者是多个线程消费,则需要把pull来的消息按照key值写入不同的内存队列中,相同key值的消息写入同一个内存队列(内存队列内的消息是有序的),然后一个线程消费一个内存队列。

kafka

imagepng
如图,在 kafka 中,你对数据指定某个 key,那么这些数据会到同一个 partition 里面,在 partition 里面这些数据是有顺序的。从这里看没啥问题,插入到数据库的数据都是有序的。

但是,我们在消费端可能会使用多线程来处理,因为单线程的处理速度慢,为了加快处理时间和吞吐量,会使用 thread 来处理。在消费端加入线程之后,就会出现顺序不一致的情况。
imagepng
如图,就是使用了多线程之后,数据顺序不一致情况。

在使用了多线程之后,如何来解决数据顺序问题?
imagepng
如图,在消费端使用内存队列,队列里的数据使用 hash 进行分发,每个线程对应一个队列,这样可以保证数据的顺序。

转自:https://www.pianshen.com/article/4100479924/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值