1.当我们的系统中引入了MQ之后,不得不考虑的一个问题是如何保证消息的顺序性,这是一个至关重要的事情,如果顺序错乱了,就会导致数据的不一致。
rabbitMQ如何保证消息顺序消费?
问题:
方案:.首先要保证同一类的操作放在一个queue中,然后一个消费者消费一个队列,然后再将这一类数据放在一个内存队列中。
例如,有一个业务,需要对一个业务单据的数据进行新增,修改,删除操作,这个时候需要根据这个业务单据的id放在同一个队列中,只有一个消费者消费这个队列的数据,然后将这个队列的数据放在同一个内存队列中,consumer中一个线程只能消费一个内存队列的数据,这样就保证了消息的顺序消费。
概括为:
拆分多个queue,每个queue一个consumer,就是多一些queue而已,确实是麻烦点;这样也会造成吞吐量下降,可以在消费者内部采用多线程的方式取消费。
2.kafka怎么保证消息的顺序消费?
具有顺序的数据写入到了不同的partition里面,不同的消费者去消费,但是每个consumer的执行时间是不固定的,无法保证先读到消息的consumer一定先完成操作,这样就会出现消息并没有按照顺序执行,造成数据顺序错误。
①确保同一个消息发送到同一个partition,一个topic,一个partition,一个consumer,内部单线程消费。