如何保证消息消费的顺序性
消息错乱场景
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 的数据都到同一个内存 队列,每个线程消费一个内存队列
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】