RocketMQ、Kafka、RabbitMQ 技术选型

1、MQ选型需要考虑的问题

  1. 业界MQ有哪几种?
  2. 每一种MQ的表现如何?
  3. 这些MQ在同等机器的条件下,能抗多少QPS?
  4. 每种MQ的性能有多高?(发送一条消息给它是需要2ms还是20ms)
  5. MQ的可用性是否能得到保障?
  6. 会不会存在丢失数据?
  7. 能否实现在线扩容?
  8. 消息中间件经常需要使用的一些功能他们都有吗(比如说延迟消息、事务消息、消息堆积、消息回溯、死信队列,等等)?

2、MQ的优势与劣势

Kafka、RabbitMQ、RocketMQ社区活跃度:目前社区都较为活跃,尤其是Kafka和RabbitMQ,目前Kafka几乎是国内大数据领域日志采集传输的标准,RabbitMQ在各种中小公司里运用极为广泛,RocketMQ也是开始在一些大公司和其他公司里快速推行中

Kafka

  • 优势:在常规的配置下,一台机器可以达到每秒十几万的QPS,发送消息给kafka都是毫秒级的,kafka支持集群部署,可用性很高
  • 劣势:kafka接受到消息会写到磁盘缓冲区,并没有直接落地在磁盘上,要是机器本身宕机了,会导致磁盘缓冲区的数据丢失;kafka本身的功能较为单一,主要是支持消息的发送和消费,一般用于日志的采集和传输,适用于量特别大、吞吐量高,不需要太多高级的功能的场景

RabbitMQ

  • 优势:可以保证消息不丢失,也可以保证高可用,支持部分高级功能,如死信队列、消息重试等
  • 劣势:吞吐量较低,一般只有每秒几万的QPS,集群的扩展较为麻烦,开发语言为erlang,较少人能阅读或修改它的源代码

RocketMQ

  • 优势:几乎同时解决了Kafka和RabbitMQ的缺陷,其吞吐量很高,单台机器能达到十万的QPS,可以保证高可用及数据不丢失,可以部署大规模集群,还支持各种高级功能,如延迟消息、事务消息、消息回溯、死信队列、消息积压等,基于Java开发,容易阅读和修改源码
  • 劣势:目前文档较少