RabbitMQ
如果有多个消费者,给每一个消费者指定一个queue,将需要保证顺序性的消息,只发送给一个queue,这个queue对应的消费者去顺序消费。kafka
写入一个partition中的数据一定是有顺序性的。
生产者在写的时候,可以指定与一个key,比如说订单key,这个订单相关的数据一定会被发送到一个partition中,而且这个partition中的数据是有顺序的。
一个消息从partition中取出来的时候,一定是有顺序的。
当消费者内部多线程并发处理消息时,可能会出现顺序问题。此时如果要保证顺序性,需要内存队列来处理,将相同key需要顺序处理的消息放入同一个队列,指定一个线程屈从这个内存队列中取数据,这样来保证顺序性。
如果消费者是单线程处理消息,处理一条消息是几十毫秒,那么一秒钟只能处理几十条数据,这个吞吐量太低了。
如果消费者多线程并发处理消息,4核8G的机器,单机开32个线程,最高每秒能处理上千条消息。
