当前位置: 首页 > news >正文

消息中间件如何选型 图解 Kafka vs RabbitMQ vs RocketMQ 的差异

综述

  • Kafka

    • 采用拉取 ( Pull) 方式消费消息,吞吐量相对更高,适合海量数据收集与传递场景,例如日志采集和集中分析
    • 缺点
      • Kafka 单机超过 64 个队列/分区,Load 会发生明显的飙高现象,队列越多,load 越高,发送消息延时更长
      • 不支持延迟发送,不支持消息重试
  • RocketMQ

    • 基于 Java 语言开发,天生为金融互联网领域而生,适用于对数据可靠性要求很高、数据实时性要求高、Topic 数量非常多的场景,如订单、交易、充值、流计算等
    • 缺点
      • 支持的客户端语言不多,目前是 java c++ Go
  • RabbitMQ

    • 基于 Erlang 语言开发,不利于做二次开发和维护,适用于对路由、负载均衡、数据一致性、稳定性和可靠性要求很高,对性能和吞吐量的要求没那么高的场景,社区活跃度高
    • 缺点
      • RabbitMQ 吞吐量会低一些,这是因为他做的实现机制比较重
      • 不支持消息有序、持久化不好、不支持消息回溯、伸缩性一般

对比

功能项目RocketMQKafkaRabbitMQ
优先级队列不支持不支持支持。建议优先级大小设置在0-10之间
延迟队列支持不支持支持
死信队列支持(商业版支持)不支持支持
消息重试支持不支持不支持
消费模式支持客户端主动拉取和服务端推送两种方式客户端主动拉取支持客户端主动拉取以及服务端推送两种模式
广播消费支持支持支持
消息回溯支持支持。Kafka支持按照offset和timestamp两种维度进行消息回溯不支持。RabbitMQ中消息一旦被确认消费就会被标记删除
消息堆积支持支持。考虑吞吐因素,Kafka的堆积效率比RabbitMQ总体上要高支持
持久化支持支持支持
消息追踪支持不支持支持。采用Firehose或者rabbitmq_tracing插件实现,但开启rabbitmq_tracing插件会影响性能,建议只在定位问题过程中开启
消息过滤支持支持不支持,但可以自行封装
多租户支持不支持支持
多协议支持兼容RocketMQ协议只支持Kafka自定义协议RabbitMQ基于AMQP协议实现,同时支持MQTT、STOMP等协议
跨语言支持支持多语言的客户端采用Scala和Java编写,支持多种语言的客户端采用Erlang编写,支持多种语言的客户端
流量控制不支持支持client和user级别,通过主动设置可将流控作用于生产者或消费者RabbitMQ的流控基于Credit-Based算法,是内部被动触发的保护机制,作用于生产者层面
消息顺序性单队列(queue)内有序支持单分区(partition)级别的顺序性不支持。需要单线程发送、单线程消费并且不采用延迟队列、优先级队列等一些高级功能整体配合,才能实现消息有序
安全机制支持SSL认证支持SSL、SASL身份认证和读写权限控制与Kafka相似
事务性消息支持支持支持

一张图

图解Kafka&RabbitMQ&RocketMQ的差异

参考

Why choose RocketMQ

Comparing RocketMQ, Kafka, and RabbitMQ

相关文章:

  • 372. 超级次方
  • 盘点:2022年豆瓣评分8.0以上的计算机书籍有哪些?
  • WPF之调用Iconfont
  • FPGA:Vivado基于IP集成的计数器设计(3)
  • 【GD32F427开发板试用】+软件IIC(OLED显示)
  • 【机器学习】逻辑回归(理论)
  • SAP ABAP 代码修改自动比较对象版本一致
  • Redis应用2(Redison)
  • 【linux】之网络安全
  • Open3D 点云最小二乘法拟合二次曲面(Python版本)
  • 大坝安全监测解决方案 水库大坝安全监测系统改造工程方案
  • 文件操作详解
  • 多线程~实现一个自己的线程池,以及基于单例模式的线程池
  • 手撕Pytorch源码#1.Dataset类 part1
  • 【jQuery】实现文件上传和loading效果
  • 编写设备驱动之i2c_client
  • M1配置Flutter环境及运行项目常见问题解决方法
  • 应用性能监控系统为企业SAP做定制分析
  • 《Linux Shell脚本攻略》学习笔记-第八章
  • 操作系统IO控制方式