Skip to content

Latest commit

 

History

History
60 lines (41 loc) · 5.58 KB

图解Kafka&RabbitMQ&RocketMQ的差异.md

File metadata and controls

60 lines (41 loc) · 5.58 KB

综述

  • Kafka

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

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

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

对比

功能项目 RocketMQ Kafka RabbitMQ
优先级队列 不支持 不支持 支持。建议优先级大小设置在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