这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天
Kafka
BMQ
RocketMQ
0.消息队列是什么
- 解耦
- 削峰
- 异步
- 日志处理
0.1 当前主流产品
Kafka:分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色
RocketMQ:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实时场景中运用较广
Pulsar:是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体、采用存算分离的架构设计(本笔记未涉及)
BMQ:和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的Kafka集群
1. 消息队列-Kafka
创建集群-新增topic-编写生产者逻辑-编写消费者程序 kafka使用场景,业务日志、用户行为数据、Metrics数据
1.1 基本概念
- Cluster 物理集群
- Topic 逻辑队列
- Partition,单个topic可有多个分片并发处理,提高吞吐
- Offset 消息在partition内部的相对位置信息,严格递增且唯一
- replica 分片的副本,分布在不同的机器可用于容灾 分为leader(从ISR同步副本中选出)和follower,有效数据恢复
- Zookeeper,存储集群元信息,包括分区分配信息等
1.2 一条消息从生产到消费是如何处理的
-
Producer端逻辑:批量发送 数据压缩
-
Broker端逻辑
- 存储 topic-partition-replica-log-logSegment(.log+.timeIndex+.index)
- 磁盘: 磁头-磁道-扇区
- 顺序写,方便寻道
- 消息索引
- 零拷贝:
-
Consumer端逻辑
- 手动分配low level
- 自动分配high level 分片分rebalance
1.3 问题
- 重启/替换/扩容/缩容,运维成本高
- 负载不均衡时 解决方案复杂
- 没有自己的缓存,只依赖page cache
- controller/coordinator/broker在同一进程中,大量IO导致性能下降
2.消息队列-BMQ
存算分离,云原生消息队列
Producer、Consumer、Proxy、Broker、HDFS、controller、coordinator、meta
读写机制
- Failover机制,写入状态机
高级特性
- 泳道/databus/mirror/parquet/index
3.消息队列-RocketMQ
Partion->quene
高级特性:事务消息/ 重试和死信队列/延迟队列