RabbitMQ、Kafka、RocketMQ比较

对比项 rabbitMQ kafka rocketMQ pulsar
使用 开发语言 Erlang Scala,Java Java Java
默认端口 5672 9092 10911 6650
语言支持 十几种 十几种 4种 多种
定位 传统消息中间件、保证消息可靠性

日志消息,高并发高吞吐,消息中间件,消息引擎,

分布式实时流处理平台

非日志消息,保证可靠性,高并发高吞吐

云原生分布式消息流平台
API 完善 完善 非常完善 非常完善
Spring集成 支持 支持 支持 支持
管理控制台 自带管理界面 kafka-manager、kafka-eagle 自带管理界面 自带管理界面
权限、安全 Vhost、user SSL、SASL TLS TTL
部署 依赖Erlang 依赖JDK、ZK(2.2.0之后可以不依赖zk) 依赖JDK 依赖JDK、ZK、Bookie
性能 并发性 Erlang支持,好
消息延迟 毫秒 毫秒 毫秒 毫秒
单机吞吐量(2core4g压测) 10W级 QPS 20W级 QPS 10W级 QPS 100W级
消息积压能力

取决于内存和设置的磁盘阈值

40%变黄,超过40%变红拒绝接收

非常好,受磁盘限制,但是保留7天后会删除 非常好,受磁盘限制,但是保留3天后会删除 永久存储

可用

可靠

持久化 内存、磁盘 磁盘 磁盘 磁盘
可用性 cluster普通集群、镜像队列模式集群 异步刷盘,数据可能丢失 异步、同步刷盘都支持
消息丢失概率 最低
消息重复概率
高可用 普通集群、镜像队列 分区和副本 队列和副本 Bookeeper
实现分布式 HaProxy + keepalived 分布式 分布式 分布式
集群间消息同步 支持 支持 支持 支持
动态扩容 不支持 支持(通过zk扩容topic) 支持
功能 支持协议 AMQP、MQTT、STOMP、XMPP 仿AMQP自定义kafka协议 JMS 都支持
消费模型 Push、Pull Pull

Pull

Push、Pull
消费历史消息 不支持(消费完自动删除) 支持(默认存储7天) 支持(默认存储3天) 支持(永久保存)
消息过滤 Topic,Direct 不支持 tag标签 tag
消息追踪 支持 通过拦截器自己实现 支持 OpenTracing / Jaeger
消息索引 不支持 支持 支持 支持
顺序消费

支持;一个消息消费失败,此消息的顺序会被打乱

支持;消费失败,顺序会被打乱 支持;消费失败,会暂停 支持
定时消息 支持 不支持 支持 支持
事务消息 支持 支持 支持 支持
消息重试 支持 不支持 支持 支持
死信队列 支持 不支持 支持 支持
延迟队列 死信队列或插件 不支持 开源版18个延迟等级,商业版不限 支持
优先级队列 支持 不支持

不支持

不支持


数据量大、吞吐量要求高的场景采用kafka;

对消息可靠性很高,甚至要求支持事务的场景,比如金融互联网,可以选择RocketMQ;

中小公司,可以选择RabbitMQ,它利用Erlang语言本身的并发优势,性能好,在微秒级别;

Pulsar近两年流行起来,是下一代云原生分布式消息流平台,可以集消息、存储、轻量化函数式计算为一体,适合商业化开发;

你可能感兴趣的:(MQ,kafka,rabbitmq,rocketmq)