08 技术选型:KafkaRabbitMQ以及RocketMQ
Posted 鮀城小帅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了08 技术选型:KafkaRabbitMQ以及RocketMQ相关的知识,希望对你有一定的参考价值。
1.技术选型的考量条件
- 业内常用的MQ有哪些?
- 每一种MQ各自的表现如何?
- 这些MQ在同等机器条件下,能抗多少QPS(每秒抗几千QPS还是几万QPS)?
- 性能有多高(发送一条消息给他要2ms还是20ms)?
- 可用性能不能得到保证(要是MQ部署的机器挂了怎么办)?
2.深层次的考量
- 他们会不会丢数据?
- 如果需要的话能否让他们进行线性的集群扩容(就是多加机台机器)?
- 消息中间件经常需要使用的一些功能他们都有吗(比如说延迟消息、事务消息、消息堆积、消息回溯、死信队列,等待)?
3.Kafka、RabbitMQ以及RocketMQ的调研对比
(1)Kafka
优点:常规的单机配置下,可以达到每秒十几万的QPS,适合大数据场景下使用。
缺点:
- 容易丢失数据——kafka收到消息不是直接落盘,而是放内存了,宕机后会导致丢失数据;
- 功能单一——只能进行发送消息,然后kafka消费消息,然后……没了
(2)RabbitMQ
优点:可以保证数据不丢失,能保证高可用性,也就是集群部署的时候部分集群宕机可以继续运行;然后支持部分高级功能,比如:死信队列、消息重试之类的。
缺点:吞吐量低,相较于Kafka只有每秒几万的级别,高并发场景下容易达到瓶颈;底层源码问题,他的开发语言是erlang,难以读懂和修改。
提一嘴:笔者之前想过去学一下RabbitMQ,但是在DEBUG看源码时被劝退了,┭┮﹏┭┮。
(3)RocketMQ
优点:吞吐量高,单机可达到10万QPS以上;可以保证高可用性,性能很高;而且支持通过配置保证数据绝对不丢失,可以部署大规模的集群;支持各种高级的功能,比如延迟消息、事务消息、消息回溯、死信队里、消息积压等;底层代码基于Java开发,便于阅读和修改。
缺点:暂无明显缺陷。
(4)活跃的社区和广泛的应用
基本上Kafka、RabbitMQ和RocketMQ的社区都还算活跃,更新效率都还可以,而且基本运用都非常的广泛。
目前Kafka几乎是国内大数据领域日志采集传输的标准,RabbitMQ在各种中小公司里运用极为广泛;RocketMQ在一些大公司和其他公司已经广泛使用,并且RocketMQ已经成为了apache的顶级项目。
(5)关于高可用集群
RabbitMQ是伪分布式的,只能部署镜像集群,集群中国内每台集群存储的数据是一样的,只能垂直的扩展,没能水平扩展。
而Kafka和RocketMQ都是将message拆分后存储到不同的partition上,然后每个partition对应一个主节点,其他机器存储副本。
以上是关于08 技术选型:KafkaRabbitMQ以及RocketMQ的主要内容,如果未能解决你的问题,请参考以下文章