通过调研常见中间件的优缺点,方便在各种生产场景下进行技术选型
技术调研怎么做?
技术调研说白了,就是对一个技术去找到一些业内常用的开源实现,然后对各种不同的实现都进行一些调研,对比一下他们的优劣势,看看谁比较符合我们的需求,谁比较适合我们来使用。
对于MQ,你还需要考虑:
- 每种MQ的各种表现
- 同等情况下,能抗多少QPS(每秒抗几千QPS还是几万QPS)
- 性能有多高(发送一条消息要2ms还是20ms)
- 可用性能不能得到保证
此外你还得考虑:
- 会不会丢失数据
- 需要的话能否进行线性集群扩容
- 一些常用功能(延迟消息,事务消息,消息堆积,消息回溯,死信队列。。。)
另外还得考虑MQ使用文档是否齐全?社区是否活跃?是否行业内得到广泛实践?编写的语言?
正文
(1)Kafka的优势和劣势
先来说Kafka,首先Kafka的吞吐量几乎是行业里最优秀的,在常规的机器配置下,一台机器可以达到每秒十几万的QPS,相当的强悍。
Kafka性能也很高,基本上发送消息给Kafka都是毫秒级的性能。可用性也很高,Kafka是可以支持集群部署的,其中部分机器宕机是可以继续运行的。
Kafka比较为人诟病的一点,似乎是丢数据方面的问题,因为Kafka收到消息之后会写入一个磁盘缓冲区里,并没有直接落地到物理磁盘上去,所以要是机器本身故障了,可能会导致磁盘缓冲区里的数据丢失。
而且Kafka另外一个比较大的缺点,就是功能非常的单一,主要是支持发送消息给他,然后从里面消费消息,其他就没有什么额外的高级功能了。所以基于Kafka有限的功能,可能适用的场景并不是很多。
因此综上所述,以及查阅了Kafka技术在各大公司里的使用,基本行业里的一个标准,是把Kafka用在用户行为日志的采集和传输上,比如大数据团队要收集APP上用户的一些行为日志,这种日志就是用Kafka来收集和传输的。
因为那种日志适当丢失数据是没有关系的,而且一般量特别大,要求吞吐量要高,一般就是收发消息,不需要太多的高级功能,所以Kafka是非常适合这种场景的。
(2)RocketMQ的优势和劣势
RocketMQ是阿里开源的消息中间件,久经沙场,非常的靠谱。他几乎同时解决了Kafka和RabbitMQ的缺陷。
RocketMQ的吞吐量也同样很高,单机可以达到10万QPS以上,而且可以保证高可用性,性能很高,而且支持通过配置保证数据绝对不丢失,可以部署大规模的集群,还支持各种高级的功能,比如说延迟消息、事务消息、消息回溯、死信队列、消息积压,等等。
而且RocketMQ是基于Java开发的,符合国内大多数公司的技术栈,很容易就可以阅读他的源码,甚至是修改他的源码。
所以现在国内很多一线互联网大厂都切换为使用RocketMQ了,他们需要RocketMQ的高吞吐量,大规模集群部署能力,以及各种高阶的功能去支撑自己的各种业务场景,同时还可以根据自己的需求定制修改RocketMQ的源码。
RocketMQ是非常适合用在Java业务系统架构中的,因为他很高的性能表现,还有他的高阶功能的支持,可以让我们解决各种业务问题。
当然,RocketMQ也有一点美中不足的地方,就是经过我的调查发现,RocketMQ的官方文档相对简单一些,但是Kafka和RabbitMQ的官方文档就非常的全面和详细,这可能是RocketMQ目前唯一的缺点。
(3)活跃的社区和广泛的运用
最后一点,基本上Kafka、RabbitMQ和RocketMQ的社区都还算活跃,更新频率都还可以,而且基本运用都非常的广泛。
加餐
在网上看到一篇从架构角度选择MQ中间件的文章,先放到这里,后续再整理
🏆【Alibaba中间件技术系列】「RocketMQ技术专题」帮你梳理RocketMQ或Kafka的选择理由以及二者PK
文档信息
- 本文作者:L1Chenxv
- 本文链接:https://l1chenxv.github.io//2023/05/07/RocketMQ-vs-Kafka/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)