Kafka RabbitMQ RocketMQ 对比

Kafka RabbitMQ RocketMQ 对比

  1. Kafka
    性能很高,发送消息基本都是毫秒级别的,支持集群部署,具备高可用的特性,比较为人诟病的一点似乎就是丢数据方面的问题,Kafka收到消息都会写入到一个磁盘缓冲区里,并没有直接写入磁盘中去,如果机器故障,可能导致磁盘缓冲区里的数据丢失.
    另外一个比较大的缺点就是功能十分单一,主要支持发送消息给它,然后从里面消费消息,没有其他高级的功能,使用的场景不是很多,主要用于大数据团队收集日志消息这种.

  2. RabbitMQ
    在RocketMQ出现之前,国内大部分公司都从ActiveMQ切换到RabbitMQ来使用,包括很多一线互联网大厂,而且直到现在都有很多中小型公司在使用RabbitMQ.
    RabbitMQ的优势在于可以保证数据不丢失,也能保证高可用性,即集群部署的时候部分机器宕机可以继续运行,然后支持部分高级功能,比如说死信队列,消息重试之类的,这些是他的优点
    最为人诟病的,就是RabbitMQ的吞吐量是比较低的,一般就是每秒几万的级别,所以如果遇到特别特别高并发的情况下,支撑起来是有点困难的
    进行集群扩展的时候(也就是加机器部署),还比较麻烦。
    另外还有一个较为致命的缺陷,就是他的开发语言是erlang,国内很少有精通erlang语言的工程师,因此也没办法去阅读他的源代码,甚至修改他的源代码。
    现在行业里的一个情况是,很多BAT等一线互联网大厂都切换到使用更加优秀的RocketMQ了,但是很多中小型公司觉得RabbitMQ基本可以满足自己的需求还在继续使用中,因为中小型公司并不需要特别高的吞吐量,RabbitMQ已经足以满足他们的需求了,而且也不需要部署特别大规模的集群,也没必要去阅读和修改RabbitMQ的源码

  3. RocketMQ
    RocketMQ是阿里开源的消息中间件,几乎同时解决了Kafka和RabbitMQ的缺陷
    RocketMQ的吞吐量也同样非常高,单机可以达到10万qps以上,而且可以保证高可用性,性能很高,而且支持通过配置保证数据绝对不丢失,可以部署大规模的集群,还支持各种高级的功能,比如说延迟消息、事务消息、消息回溯、死信队列、消息积压,等等
    RocketMQ是基于Java开发的,符合国内大多数公司的技术栈,很容易就可以阅读他的源码,甚至是修改他的源码
    RocketMQ也有一点美中不足的地方,就是经过我的调查发现,RocketMQ的官方文档相对简单一些,但是Kafka和RabbitMQ的官方文档就非常的全面和详细,这可能是RocketMQ目前唯一的缺点

  4. 活跃的社区和广泛的运用
    基本上Kafka、RabbitMQ和RocketMQ的社区都还算活跃,更新频率都还可以,而且基本运用都非常的广泛。
    尤其是Kafka和RabbitMQ,目前Kafka几乎是国内大数据领域日志采集传输的标准,RabbitMQ在各种中小公司里运用极为广泛,RocketMQ也是开始在一些大公司和其他公司里快速推行中。

你可能感兴趣的:(MQ,java-rabbitmq,rabbitmq,java-rocketmq)