某个公司面试真题,消息中间件如何保证消息的顺序性
首先我们常用的消息中间有kafka和Rabbitmq,我们今天就说说这两种中间件的顺序问题
RabbitMQ
一个queue,多个consumner进行消费,比如向Rabbitmq中发三条消息,而我们的三个消费者进行消费,有的消费者吞吐量高,就先进行消费了,就会导致顺序问题,如下图
解决方案
消息顺序问题,我们有两种方案
- 建立多个queue,让每一个queuq对应一个消费者,
- 一个queue,一个消费者,然后消费者内部使用队列进行排序,然后交给底层不同的线程处理
基本思想都是一样,就是每一个队列都有一个线程去消费,如下图
kafka
我们知道kafka的消息在每一个分区是有顺序的,但是整体是无顺序的,当我们消费者消费同一个分区时候理论是可以保证消息的顺序性,仅仅当我们的消费者只有一个线程进行消费的时候,这种性能会很差,因此如果存在多个线程消费就会导致顺序问题
解决方案
我们可以在消费者中建立多个队列,然后根据相同的可以,放入同一个queue中,然后每一个队列