应用案例:
微信红包
功能 | 消息队列 RocketMQ | Apache RocketMQ (开源) |
消息队列 Kafka | Apache Kafka (开源) |
RabbitMQ (开源) |
---|---|---|---|---|---|
安全防护 | 支持 | 不支持 | 支持 | 不支持 | 支持 |
主子账号支持 | 支持 | 不支持 | 支持 | 不支持 | 不支持 |
可靠性 | - 同步刷盘 - 同步双写 - 超3份数据副本 - 99.99999999% |
- 同步刷盘 - 异步刷盘 |
- 同步刷盘 - 同步双写 - 超3份数据副本 - 99.99999999% |
异步刷盘,丢数据概率高 | 同步刷盘 |
可用性 | - 非常好,99.95% - Always Writable |
好 | - 非常好,99.95% - Always Writable |
好 | 好 |
横向扩展能力 | - 支持平滑扩展 - 支持百万级 QPS |
支持 | - 支持平滑扩展 - 支持百万级 QPS |
支持 | - 集群扩容依赖前端 - LVS 负载均衡调度 |
Low Latency | 支持 | 不支持 | 支持 | 不支持 | 不支持 |
消费模型 | Push / Pull | Push / Pull | Push / Pull | Pull | Push / Pull |
定时消息 | 支持(可精确到秒级) | 支持(只支持18个固定 Level) | 暂不支持 | 不支持 | 支持 |
事务消息 | 支持 | 不支持 | 不支持 | 不支持 | 不支持 |
顺序消息 | 支持 | 支持 | 暂不支持 | 支持 | 不支持 |
全链路消息轨迹 | 支持 | 不支持 | 暂不支持 | 不支持 | 不支持 |
消息堆积能力 | 百亿级别 不影响性能 |
百亿级别 影响性能 |
百亿级别 不影响性能 |
影响性能 | 影响性能 |
消息堆积查询 | 支持 | 支持 | 支持 | 不支持 | 不支持 |
消息回溯 | 支持 | 支持 | 支持 | 不支持 | 不支持 |
消息重试 | 支持 | 支持 | 暂不支持 | 不支持 | 支持 |
死信队列 | 支持 | 支持 | 不支持 | 不支持 | 支持 |
性能(常规) | 非常好 百万级 QPS |
非常好 十万级 QPS |
非常好 百万级 QPS |
非常好 百万级 QPS |
一般 万级 QPS |
性能(万级 Topic 场景) | 非常好 百万级 QPS |
非常好 十万级 QPS |
非常好 百万级 QPS |
低 | 低 |
性能(海量消息堆积场景) | 非常好 百万级 QPS |
非常好 十万级 QPS |
非常好 百万级 QPS |
低 | 低 |
rabbitmq消息发送接收原理:
参见官网:http://www.rabbitmq.com/getstarted.html
消息的几种发送接收类型
exchange有四种类型:分别是Direct exchange、Fanout exchange、Topic exchange、Headers exchange。
几个概念说明:
Broker:它提供一种传输服务,它的角色就是维护一条从生产者到消费者的路线,保证数据能按照指定的方式进行传输,
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
Queue:消息的载体,每个消息都会被投到一个或多个队列。
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来.
Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
vhost:虚拟主机,一个broker里可以有多个vhost,用作不同用户的权限分离。
Producer:消息生产者,就是投递消息的程序.
Consumer:消息消费者,就是接受消息的程序.
Channel:消息通道,在客户端的每个连接里,可建立多个channel.
高可用部署方案有两种模式:普通模式和镜像模式
集群类型:普通集群、镜像集群
参考官网文档:http://www.rabbitmq.com/clustering.html#starting
运维管理:
rabbitmq提供管理的web插件
rocketmq消息发送接收原理:
高可用集群部署方案,broker部署主从模式
运维管理:
rocketmq提供管理的web-console
消息发送接收机制:
参考各大云平台对Kafka的使用说明可以看出kafka适合于海量数据的处理系统中
官方使用案例说明:http://kafka.apache.org/uses
参考:CMQ后台
CMQ是rabbitmq的升级版,支持mq的消息回溯,对消息的超时策略等做了简单的优化
腾讯云平台使用地址:https://console.cloud.tencent.com/mq/index?rid=1
cmq队列参数为:
y
添加主题订阅可以设置重试的策略:
订阅地址官方文档中说明:目前推送服务不能推送到私有网络中,因此 endpoint 填写为私有网络域名或地址将接收不到推送的消息,目前支持推送到公网和基础网络。
文档地址:https://cloud.tencent.com/document/product/406
1.订单消息分发,特点:消息时效性高,消息不能丢失,优先级高
可以使用rabbitmq,rocketmq,cmq
2.日志收集分析,特点:数据量大,优先级低,
可以使用ELK解决方案,使用kafka,redis,rocketmq做消息队列
3.数据分库分表后数据异构,特点:消息及时性和顺序性,优先级中
可以使用rocketmq来保证消息顺序可靠传输
参考文章:http://www.javashuo.com/article/p-pkfdqnxz-ga.html
参考文章:http://www.javashuo.com/article/p-giwbpbcc-gd.html
rabbitmq中交换机参考文章:https://blog.csdn.net/rainday0310/article/details/22082503
rabbitmq普通集群和镜像集群参考:https://blog.csdn.net/yangbutao/article/details/10982391
rocketmq消息发送接收相关参考:https://blog.csdn.net/wuzhengfei1112/article/details/78076718
rocketmq相关核心原理参考:https://m.aliyun.com/yunqi/articles/66110
KAFKA相关文章: