主要是比较这几种队列中间件:
- rabbitmq
- kafka
- rocketmq
- ONS
分以下几个维度来比较
高并发
-
- 毫无疑问KAFKA发消息的速度是最快的
- ROCKETMQ/ONS次之
- rabbitmq最慢
高可用
-
- 这几种都能做MASTER/SLAVE,跨机房的高可用
- KAFKA复制有很多坑,所以这个分数要降低
所需要的节点数量
-
- KAFKA集群环境下,需要依赖zk, zk至少3个节点,再加上kafka的至少3个节点,那就是6个
- ROCKETMQ集群环境下,虽然不依赖zk,但是需要name server,至少2个节点,2个MASTER,就是4个
- RABBITMQ集群环境下,不依赖zk,只要3个erlang node,就是3个
全局顺序消费
-
- KAFKA只要在分区是1个情况下才能大致的做到全局消费的顺序
- ROCKETMQ/ONS同上,只是变成了另外一个术语
- RABBITMQ能大致保证全局顺序消费
- 以上所讲的都是消息没有被拒绝或者消息处理失败重新回到队列的情况
其他功能-流控
-
- 只有RabbitMQ有
其他功能-优先级队列
-
- RabbitMQ对优先级队列支持最完善
结论
- Rabbitmq很适用于小团队和高并发不是很突出的地方,并且团队希望尽量自动化
- 牵涉到高并发,并且是业务消息要用rocketmq/ons
- 牵涉到高并发,但不是业务消息的用kafka