Kafka如何保证消息的顺序性
1. 问题
⽐如说我们建了⼀个 topic,有三个 partition。⽣产者在写的时候,其实可以指定⼀个 key,⽐如说我们指定了某个订单 id 作为 key,那么这个订单相关的数据,⼀定会被分发到同⼀个 partition 中去,⽽且这个 partition 中的数据⼀定是有顺序的。
消费者从 partition 中取出来数据的时候,也⼀定是有顺序的。到这⾥,顺序还是 ok 的,没有错乱。接着,我们在消费者⾥可能会搞多个线程来并发处理消息。因为如果消费者是单线程消费处理,⽽处理⽐较耗时的话,⽐如处理⼀条消息耗时⼏⼗ ms,那么 1 秒钟只能处理⼏⼗条消息,这吞吐量太低了。⽽多个线程并发跑的话,顺序可能就乱掉了。
2. 解决⽅案
⼀个 topic,⼀个 partition,⼀个 consumer,内部单线程消费,单线程吞吐量太低,⼀般不会⽤这个。
写 N 个内存 queue,具有相同 key 的数据都到同⼀个内存 queue;然后对于 N 个线程,每个线程分别消费⼀个内存 queue 即可,这样就能保证顺序性。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论