Kafka 保证消息的消费顺序
一、1个Topic(主题)只创建1个Partition (分区),这样生产者的所有数据都发送到了一个Partition (分区),保证了消息的消费顺序;
二、生产者在发送消息的时候指定要发送到哪个 Partition,这样同一个 Partition 的数据会被同一个消费者消费,从而保证了消息的消费顺序。
实现思路
在Kafka中,只保证Partition (分区)内有序,不保证Topic所有分区都是有序的。所以Kafka要保证消息的消费顺序,可以有2种方法:
- 一个Topic(主题)只创建1个Partition (分区),这样生产者的所有数据都发送到了一个Partition (分区),保证了消息的消费顺序。
- 在consumer端使用MessageListenerOrderly监听器来保证顺序消费。
RocketMQ 保证消息的消费顺序
一、局部顺序消息消费,也就是保证同一个消息队列上的消息顺序消费;
二、全局顺序消息消费,即一个Topic下的所有消息都要保证顺序。
实现思路
在RocketMQ中,消息分为全局有序和局部有序消息。全局有序是一个topic下的所有消息都要保证顺序,如果要保证消息全局顺序消费,可以将该主题的队列数设置为1,牺牲高可用性。局部有序是指保证同一个消息队列上的消息顺序消费。具体来说,可以通过以下方式来实现:
- 在producer中指定hashKey,通过hashKey消息会被放入特定的队列,消费者消费这个队列的时候,如果指定了顺序消费,是单线程消费的,这样就保证了同一队列内有序。
- 在consumer端使用MessageListenerOrderly监听器来保证顺序消费。
rabbitmq保证消息的顺序消费
RabbitMQ没有属性设置消息的顺序性,所以在没有前提的情况下说 RabbitMQ消息的消费具有顺序性是错误的。但是,我们可以通过以下方式来实现RabbitMQ消息的顺序消费:
- 拆分多个queue,每个queue一个consumer,就是多一些queue而已,确实是麻烦点;这样也会造成吞吐量下降,可以在消费者内部采用多线程的方式取消费。
- 或者就一个queue但是对应一个consumer,然后这个consumer内部采用多线程的方式消费。
版权归原作者 学亮编程手记 所有, 如有侵权,请联系我们删除。