RabbitMQ/RocketMQ/Kafka 如何提高消费速度

RabbitMQ

1.RabbitMQ 无法向Kafka or RocketMQ 一样提高并行速度。

2.RabbitMQ中,一个Queue 可以被多个消费者同时消费。所以可以增加消费者的数量来提高消费速度。

3.那么如何提高单个消费者的处理速度?我们可以通过设置每次拉取消息的条数来减少网络传输,通过批量ACK,可以减少ACK的次数,减少网络开销,从而提高消费速度。

4.但是通过Prefetch count之后,可以减少网络传输,但消费速度则限制在了consumer的处理速度上,毕竟consumer还是得顺序消费掉这些消息。这时候,我们可以通过java线程或者go协程来并发的处理消息。

RocketMQ&Kafka

1.对应RocketMQ 于 Kafka来说,同一队列(RocketMQ) 或者 一个 分区(Kafka) 只能被一个消费者消费,所以当消费者数量超过队列总数或者分区总数时,多余的消费者是空闲的,为了提高并行速度可以通过增加队列数量或者分区数量。

2.RocketMQ & Kafka 和RabbitMQ 一样,都提供批量拉取消息和批量Ack的能力,可以参考RabbitMQ的处理方式。

 

总结

1.RabbitMQ 与 RocketMQ/Kafka 的消费方式是不同的, RabbitMQ可以被多个消费者同时消费,但是RockeMQ和Kafka每个队列或分区只能被一个消费者消费,所以要提高者两者的消费速度,只能通过增加分区或队列数。

2.三种都提供了批量拉取和批量ACK的功能,都是提高速率不错的方法,但需要考虑消息的丢失问题。

3.批量拉取消息的时候,消费速度限制在单个消费者身上,这时候可以通过多线程或者协程提高消费速度。

参考

1.狸猫技术窝 RocketMQ系列

2.《深入理解Kafka:核心设计与实践原理》

3.《RabbitMQ实战》

4.https://www.cnblogs.com/bossma/p/practices-on-improving-the-speed-of-rabbitmq-consumption.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章