MQ-保证消息顺序性

 1.rabbitMQ如何保证消息顺序性

原因:假如生产者生产了三条数据,放到rabbitMQ中,这三条数据可能会被三个消费者拿到,三个消费者对数据库的操作是并行的,从而会导致数据错乱的问题

解决:一个 queue,对应一个 consumer,然后这个 consumer 内部用内存队列做排队 

rabbitMQ可能会出现消息错乱

rabbitMQ完全保证消息顺序性


2.kafka如何保证消息顺序性

原因:建了一个 topic,有三个 partition。生产者在写的时候,其实可以指定一个 key,比如说我们指定了某个订单 id 作为 key,那么这个订单相关的数据,一定会被分发到同一个 partition 中去,而且这个 partition 中的数据一定是有顺序的。
消费者从 partition 中取出来数据的时候,也一定是有顺序的。到这里,顺序还是 ok 的,没有错乱。接着,我们在消费者里可能会搞多个线程来并发处理消息。因为如果消费者是单线程消费处理,而处理比较耗时的话,比如处理一条消息耗时几十 ms,那么 1 秒钟只能处理几十条消息,这吞吐量太低了。而多个线程并发跑的话,顺序可能就乱掉了。

解决:

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

 2)写 多个内存 队列,根据Hash算法把具有相同 key 的数据都到同一个内存 queue;然后对于 多个线程,每个线程分别消费一个内存 queue 即可,这样就能保证顺序性。

kafka消息错乱

kafka完全保证消息顺序性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值