一、前世今生
1.1 消息队列
消息队列(MQ),是一个用来保存消息的容器,本质上是一种高吞吐、高并发、高可用的队列。
1.2 消息队列的作用
-
异步处理:解决双边速度不同的异步问题
-
应用解耦:解决数据源的读写成本问题
-
流量削锋:解决秒杀场景的流量激增问题
-
日志处理:解决大量日志传输问题
1.3 发展历程
1.4 业界产品对比
主要有Kafka、RocketMQ、Pulsar和BMQ。
二、Kafka
2.1 Kafka
Kafka是一个开源的、分布式的、高吞吐量的消息队列系统,由 LinkedIn 开发并贡献给 Apache 基金会。Kafka 具有可扩展性、高可用性和强一致性。
2.2 应用场景
搜索服务:收集并处理日志数据,提供实时搜索建议。
直播服务:实时统计在线用户数,观看人数等信息。
订单服务:处理订单状态变更事件,同步订单数据。
支付服务:处理支付事件,异步通知业务系统。
2.3 Kafka架构
-
Producer :消息生产者,就是向kafka broker发消息的客户端
-
Consumer :消息消费者,向kafka broker取消息的客户端
-
Consumer Group :消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者
-
Broker:一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic
2.4 Kafka的缺陷
-
因为数据复杂问题,运维成本较高
-
对于负载不均衡场景,解决方案复杂
-
在读取时,完全依赖page cache,没有自己的缓存
-
Controller、Coordinator和Broker在同一进程中,大量IO时性能下降严重
三、BMQ
3.1 BMQ
BMQ 是字节跳动开发的一款云原生消息队列,兼容 Kafka 协议,提供存算分离的架构。BMQ 通过将计算与存储分离,可以实现高性能、高可用和高可靠的消息队列服务。
3.2 BMQ 架构
3.3 运维操作对比
3.4 文件结构对比
3.5 BMQ 读写流程
3.6 BMQ 高级特性
泳道、Databus、Mirror、Index、Parquet。
四、RocketMQ
4.1 RocketMQ
RocketMQ 是阿里巴巴旗下的一款开源的高性能、高可用、高可靠的消息队列中间件。
4.2 使用场景
RocketMQ主要针对电商业务线,业务涉及广泛,常见的注册、订单、物流等均有使用,也对高峰值场景有应用。
4.3 基本概念
4.4 RocketMQ 架构
4.5 存储模型
4.6 高级特性
事务消息、重试和死信队列、延迟队列。