- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 视频嵌入链接 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
超大规模云原生消息引擎详解-雷丽媛
雷丽媛-火山引擎云原生计算研发工程师
2015-2017 年就职于百度搜索架构部门,参与分布式表格及分布式文件系统的研发工作。17年5月加入字节跳动,曾负责 HDFS 的研发工作,目前任离线消息队列方向负责人,与团队从零搭建了新一代就兼容 Kafka 协议的云原生消息队列 BMQ。
分享介绍:
随着字节跳动内部业务快速增长,经典消息队列 Kafka 劣势开始逐渐暴露,在弹性、规模、成本及运维方面都无法满足业务需求。因此字节研发了计算存储分离的云原生消息队列 BMQ,在极速扩缩容及吞吐上都有非常好的表现。
展开查看详情
1 .字节跳动云原生消息队列实践 字节跳动基础架构 - 雷丽媛
2 .目录 • Kafka 时代 • 新一代消息队列 BMQ • BMQ 在字节 • BMQ 在火山 • BMQ 的未来 • Q&A
3 .目录 • Kafka 时代 • 新一代消息队列 BMQ • BMQ 在字节 • BMQ 在火山 • BMQ 的未来 • Q&A
4 .Kafka 时代 - Kafka • Cluster, Topic, Partition, Offset • Producer, Consumer Group • Broker (Coordinator, Controller) 1 2 1 Leader Followe 2 3 3 r Partition 0 Topic A Broker A Broker B Broker C Partition 0 Topic B Cluster
5 .Kafka 时代 - Kafka • 小 k 所在的团队希望在元旦期间上线一个新功能 • 10 月向 Kafka 团队报备流量上涨。 • 11 月业务功能测试,发现需要使用一个新版 Kafka 的功能。 • 12 月,Kafka 集群升级完毕,业务压测,发现有热点,影响了同集群其他 topic。 • 元旦功能上线,瞬间成为爆款,流量上涨超出预期。 • 元旦假期结束,需要将集群缩容,腾挪资源给春节活动使用。 • 小 k 和 Kafka 团队的同学都很崩溃 :(
6 .Kafka 时代 - Kafka 运维操作 1 2 1 Leader 1 1 Follower 3 3 2 3 2 2 1 3 2 Broker A Broker B Broker C 重启 替换 Broker A Broker B Broker C Broker D 扩容 缩容 1 2 1 1 1 1 3 2 2 3 2 3 3 3 2 2 Broker A Broker B Broker C Broker D Broker A Broker B Broker C
7 .Kafka 时代 - Kafka 负载均衡 • 需考虑存储空间、写入吞吐及消费吞吐等 • 负载均衡需要 IO 开销 • 热点问题严重 2 3 2 3 1 4 1 4 1 4 1 4 3 2 3 3 2 2 Broker A Broker B Broker C Broker D Broker A Broker B Broker C Broker D 负载均衡
8 .Kafka 时代 - Kafka 故障恢复 • 单机故障 1 2 1 1 2 1 2 3 3 2 3 3 Broker A Broker B Broker C Broker A Broker B Broker C
9 .Kafka 时代 - Kafka 故障恢复 • 多机故障 1 2 1 1 2 1 2 3 3 2 3 3 Broker A Broker B Broker C Broker A Broker B Broker C
10 .Kafka 时代 - Page Cache • 不可控 • 大业务穿透 Page Cache 后对磁盘冲击较大 • 大量 Cache Miss 后影响写入流量
11 .Kafka 时代 - 小结 • 运维操作耗时长 • 负载均衡算法复杂,均衡代价大,有 Partition 热点 • 缺少自动的故障恢复手段 • 重度依赖 Page Cache,同时影响读写 • 状态重,难以云原生化
12 .目录 • Kafka 时代 • 新一代消息队列 BMQ • BMQ 在字节 • BMQ 在火山 • BMQ 的未来 • Q&A
13 .新一代消息队列 BMQ - 架构 • C++ 实现 • 避免 GC 问题 ByteDance HDFS / CFS Proxy Proxy Proxy • 高性能 Meta Storage Coordinator Controller • 池化存储 • 慢节点处理 Broker Broker Broker • 易扩展 BMQ • 兼容 Kafka 协议 消费位点提交/获取 消费数据流 Metadata 生产数据流
14 .新一代消息队列 BMQ - 架构 - 数据存储 • Partition 切割为 Segment • 每个 Segment 作为一个文件存储在分布式存储系统上 2 3 P1S1 P1S2 P1S1 P1S3 1 4 1 4 P1S3 P3S1 P1S2 P2S1 P2S1 P4S1 P3S1 P4S1 3 2 Broker A Broker B Broker C Broker D DanceDN 1 DanceDN 2 DanceDN 3 DanceDN 4 Kafka BMQ
15 .新一代消息队列 BMQ - 架构 - 数据存储 P1S1 P1S2 P1S1 P1S3 P1S1 P1S2 P1S1 P1S1 P1S3 P3S1 P1S2 P2S1 P3S1 P3S1 P1S2 P1S2 P2S1 P4S1 P3S1 P4S1 P2S2 P3S1 P2S2 P2S2 P3S2 P2S2 P3S2 DanceDN 1 DanceDN 2 DanceDN 3 DanceDN 4 重启 替换 DanceDN 1 DanceDN 2 DanceDN 3 DanceDN 4 扩容 缩容 P1S1 P1S2 P1S1 P2S1 P1S1 P1S2 P1S1 P1S3 P3S1 P3S1 P1S2 P1S3 P3S1 P1S2 P2S1 P2S1 P2S1 P4S1 P3S1 P4S1 P4S1 P1S3 P2S1 DanceDN 1 DanceDN 2 DanceDN 3 DanceDN 4 DanceDN 1 DanceDN 2 DanceDN 3 DanceDN 4
16 .新一代消息队列 BMQ - 架构 - 数据存储 • Kafka 缺少自动的故障恢复手段 • BMQ • BMQ 由 Controller 识别故障机器/机房,秒级完成恢复 • HDFS P1S1 P1S2 P1S1 P1S3 P1S1 P1S2 P1S1 P1S3 P1S3 P3S1 P1S2 P2S1 P1S3 P3S1 P1S2 P2S1 P2S1 P4S1 P3S1 P4S1 P2S1 P4S1 P3S1 P4S1 DanceDN 1 DanceDN 2 DanceDN 3 DanceDN 4 DanceDN 1 DanceDN 2 DanceDN 3 DanceDN 4
17 . 新一代消息队列 BMQ - 生产 • 一个 Broker 负责多个 Partition • 每个 Partition 在同一时间仅在一个 Broker 上活跃 • 每个 Partition 在 Broker 上都是一个运转的状态机 create Controller init segment assignment save recover failover append checkpoint step down finalize update index & segment checkpoint
18 .新一代消息队列 BMQ - 生产 • 消息 Flush 超时后进行 Failover,抹平延时毛刺。 success inflight async clear buffer storage buffer flush inflight validation failed or timeout failover to a new segment current file is closed in background thread
19 .新一代消息队列 BMQ - 生产 • Async Flush 失败的消息会被写入下一个 Segment Memory inflight buffer 0 512 segment 0 ByteDance HDFS 0 680 inflight buffer segment 1 segment 0: segment 120: Meta {size: 512, offset: [0, 120) {size: 680, offset: [120, 259)}
20 .新一代消息队列 BMQ - 生产 • 强大的分布式存储支撑 - DanceNN • C++ 重构 HDFS Namenode:低延时,无 GC。 • 锁拆分:拆分原生 namespace 中的一把大锁。 • Namespace on Rocksdb:节省内存,加速启动。 • QPS:5w 写 + 15w 读。 • Latency:写 p99 10ms,读 p99 <1ms。 • inode 个数:~50亿。
21 .新一代消息队列 BMQ - 消费 • Proxy 除了转发请求外,主要负责消费逻辑的处理 no has new yes read messages file high watermark Broker
22 .新一代消息队列 BMQ - 消费 • Message Cache:缓存消息,降低对存储的访问频次。 • File Cache:缓存文件句柄,降低对存储元数据的访问频次。 • Index Cache:缓存 Segment Index,降低查找时的 IO 消耗。 no has new yes message miss file hit read messages cache cache file high miss hit hit watermark miss open index Broker cache seek file relative message offset -> storage offset
23 .新一代消息队列 BMQ - 消费 • 强大的分布式存储支撑 - DanceDN • C++ 重构 HDFS Datanode:低延时,无 GC。 • 多介质存储:nvme + HDD,低延时 + 大容量。 • 慢节点快速 Failover:读延时毛刺抹平。 • TailRead 支持:更加极致的尾读性能。
24 .新一代消息队列 BMQ - Controller • 独立 Controller • 负载均衡 • 组件生命周期管理 Proxy Proxy Proxy ByteDance HDFS Meta Storage • Topic 内及全局均衡 Coordinator Controller • 根据 Topic 流量动态调整权重 • 健康检查 Broker Broker Broker • 故障单点隔离 BMQ • 收集其余组件指标,识别故障单点
25 .新一代消息队列 BMQ - Controller Broker A Broker B Broker C Broker D Broker A Broker B Broker C Broker D Controller Controller TopicA/Partition0: Broker A TopicA/Partition0: Broker A Broker B TopicA/Partition1: Broker B TopicA/Partition1: Broker B TopicB/Partition0: Broker C TopicB/Partition0: Broker C TopicB/Partition1: Broker D TopicB/Partition1: Broker D
26 . 新一代消息队列 BMQ - 容灾容错 - ByteDance HDFS • HDFS 部署:Federation + copy set BMQ clusters BMQ clusters BMQ clusters BMQ clusters BMQ ByteDance HDFS NNProxy NNProxy NNProxy NNProxy DanceNN DanceNN DanceNN DanceNN DanceNN DanceNN DanceNN DanceNN DanceNN BK ZK BK ZK BK ZK DanceDN DanceDN DanceDN DanceDN DanceDN DanceDN DanceDN DanceDN
27 .新一代消息队列 BMQ - 容灾容错 - ByteDance HDFS • BMQ:灵活切换 ByteDance HDFS 集群 Cluster Configuration: BMQ clusters primary base path = /base0 backup base paths = [/base1, /base2] $base_path = /base0 /{base_path}/cluster_id/topic_id/partition_id/segment_start_offs et $base_path = next backup base path NNProxy /base0 /base2 /base1 ByteDance ByteDance ByteDance OK producing process error HDFS HDFS HDFS
28 .新一代消息队列 BMQ - 容灾容错 - 多机房 • 分布式存储及元数据存储跨机房部署 • 数据同步写入到多机房保持全局视图一致 C&C C&C C&C Proxy Proxy Proxy Controller&Coordinator Broker Broker Broker Distributed Storage Meta Storage Data Center A Data Center B Data Center C
29 .新一代消息队列 BMQ - 容灾容错 - 单机房故障/孤岛 • 故障机房读写失败 • Partition 调度到非故障机房 Broker • 数据复制到非故障机房 • 可能存在容量风险 C&C C&C C&C Proxy Proxy Proxy Broker Broker Broker Distributed Storage Meta Storage Data Center A Data Center B Data Center C