无废话技术选型之--消息中间件选型(rabbitMQ、rocketMQ、kafka)
0-前言
消息中间件在高并发系统中作用尤为重要,几乎必不可少,现在几乎都是rabbitMQ、rocketMQ、kafka的天下,
其他的请忘了它们;
1-消息中间件的作用
提升系统性能;系统解耦;大流量削峰;
2-rabbitMQ、rocketMQ、kafka对比
kafka:
优点:
1、高吞吐量、高性能,单机十几万QPS
2、Kafka支持集群部署
缺点:
1、有可能会造成数据丢失
2、功能单一,主要就是收发消息;缺少高级功能;
rabbitMQ:
优点:
1、保证数据不丢失;
2、高可用,有高级功能;如消息重试、死信队列等
缺点:
1、性能较低,QPS几万;
2、集群线性扩展麻烦;
3、erlang实现,懂得人不多,二次开发困难;
rocketMQ:
优点:
1、高吞吐量、高性能,单机十万QPS
2、保证数据绝对不丢失
3、支持大规模集群部署,线性扩展方便
4、支持各种高级的功能,如延迟消息、消息回朔等
5、java实现,二次开发方便
缺点:
1、比kafka性能略低
3-如何选择
1、小项目可以选择rabbitMQ,性能略低,但使用和部署都简单;
2、性能要求极高,且能允许丢失部分数据,可以选择kafka,比如大数据日志处理相关场景;
3、除以上之外,rocketMQ无疑是一步到位的方案;
实际项目中,rocketMQ是首选;个人墙裂推荐;
实际上,除了大数据处理上适当考虑增加kafka,其他时候,rocketMQ就已经一劳永逸了;