如何保证消息消费的顺序性

消息错乱场景

rabbitMQ

 

一个 queue,多个 consumer,生产者向 RabbitMQ 里发送了三条数据,顺序依次是 data1/data2/data3,压入的是 RabbitMQ 的一个内存队列。结果消费者2先执行完操作data2,然后是 data1/data3

kafka

一个 topic,有三个 partition

生产者在写的时候,可以指定一个 key(比如说我们指定了某个订单 id 作为 key,那么这个订单相关的数据,一定会被分发到同一个 partition 中去)从而使消息分发到同一个 partition 中去,并且这个 partition 中的数据一定是有顺序的。此时消费者从 partition 中取出来数据的时候,也一定是有顺序的

但是消费者里可能会搞多个线程来并发处理消息,多个线程并发跑的话,顺序可能就乱掉了

解决方法

rabbitMQ

 

拆分多个 queue,每个 queue 一个 consumer,consumer 内部用内存队列做排队

kafka

  • 一个 topic,一个 partition,一个 consumer,内部单线程消费,单线程吞吐量太低,一般不会用这个。

  • consumer 内部用内存队列做排队,具有相同 key 的数据都到同一个内存 队列,每个线程消费一个内存队列

posted @   上好佳28  阅读(85)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示