一文了解字节跳动消息队列演进之路
作者:字节跳动消息队列研发工程师|姬索肇
Kafka 时代
运维操作
- 重启操作由以下几步组成:首先将 Leader 节点从待重启的机器上转移走后重启该机器。机器重启后,开始获取重启期间延迟的消息(Lag),Lag 消息追完后,再将 Leader 节点切回此机器。此过程的主要问题在于它既慢又会涉及到数据拷贝。
- 在替换机器的过程中,新机器需要寻找原来的 Leader 节点并从 Leader 节点拷贝数据。只有在数据拷贝完成后,新机器才能切换为 Leader 节点。此过程较慢并且会导致 IO 开销非常大。
- 扩容过程包括拷贝数据和切换 Leader 节点。这个过程既慢又有大量的 IO 开销,因而在面对突发流量高峰时,无法通过扩容来解决线上问题。
- 缩容操作包括拷贝数据、切换 Leader 节点以及关闭机器。这个过程也相对比较慢。
负载均衡
故障恢复
Page Cache
痛点总结
- 运维操作耗时长:随着数据量的增加以及集群负载的提升,所有相关的运维操作都需要非常长的时间才能完成,这对团队的效率有着明显的影响。
- 负载均衡算法复杂,均衡代价大:Kafka的负载均衡算法相当复杂。并且,由于负载均衡代价大,无法对负载进行实时调度。
- 缺少自动的故障恢复手段:在面临故障场景时,特别是多机故障时,Kafka的恢复能力非常弱,使得我们的运维工作中充满困难。
- 重度依赖 Page Cache,同时影响读写:由于Kafka重度依赖Page Cache,在高负载情况下会明显影响其读写性能。
- 状态重,难以云原生化:由于大量使用本地磁盘,Kafka的状态非常“重”,导致其很难进行弹性改造,例如在云平台上进行CPU和内存的弹性出让等。这对我们进行云原生化改造带来了巨大的困难。
自研云原生消息引擎
- 高性能:BMQ 使用 C++ 语言编写,避免了 Kafka 使用的 Java 语言的 GC 等问题。相比于 Kafka 只使用操作系统的 Page Cache,BMQ 提供了多级缓存机制,拥有高效的数据处理能力。
- 存算分离:BMQ 充分使用云存储,实现存储与计算的分离,提高了计算资源的利用率,由云存储组件CloudFS保证数据一致性。
- 高吞吐:BMQ 将数据拆分成多个 Segment 文件,存储在不同的分布式存储系统的不同机器上的不同磁盘上,从而提高了吞吐性能。
- 低延迟:BMQ 的 Broker 节点自动感知写入文件尾部的消息延迟变高,会创建新的 Segment 文件来降低延迟。
技术架构
- Proxy:负责处理来自客户端的请求。
- 对于 Produce 请求,Proxy 对请求中的 Topic-Partition 做聚合后转发给对应的 Broker,由 Broker 处理完成后返回结果给客户端;
- 对于 Consume 请求则结合元数据直接读取分布式存储系统中的数据,同时提供多层缓存机制。
-
- Broker:负责处理来自 Proxy 的 Produce 请求,将数据持久化到分布式存储系统中,同时负责删除过期的数据。
- Controller:根据统计信息来对 Partition 进行负载均衡,同时还负责集群管理的任务,如新建 Topic、扩容 Partition 等。
- Coordinator:协调一个消费组下多个 Client 之间的负载均衡以及处理该消费组的 Offset 相关请求。
- 每个 Partition 对应分布式存储CloudFS中的一个目录,数据被切分为多个 Segment 文件并存储。
弹性扩缩容
高吞吐
低延迟
- 对于写请求,首先将数据写入加速单元 DataNote(以下简称 DN)中,之后由后台线程以异步方式将数据上传到对象存储 TOS(以下简称 TOS)中。这种方式可以有效减少写入过程中可能出现的延迟情况。
- 对于读请求,系统会优先从 DN 中读取数据。如果 DN中 不存在请求的数据,系统会从 TOS 中加载对应的数据并缓存到 DN 中。这种设计使得读取过程更为高效,大大缩短了数据从请求到交付的时间,实现了出色的低延迟性能。
综合对比
| Kafka | BMQ |
---|---|---|
升级/重启 | 分钟级重启 | 秒级重启 |
机器替换 | 新机器高负载 | 新机器正常负载 |
扩容/缩容 | 机器间 Balance 数据 | 无其他操作 |
负载均衡 | 机器间搬迁数据 | 无需搬迁数据 |
流量突发 | 天级别扩容 | 秒级扩容 |
实践案例

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
vivo智能活动中台-悟空系统建设之路
作者:来自 vivo 互联网悟空系统研发团队 本文根据冯伟、姜野老师在“2023 vivo开发者大会"现场演讲内容整理而成。公众号回复【2023 VDC】获取互联网技术分会场议题相关资料。 在AIGC、低代码等新技术、新基建的技术驱动下,结合vivo互联网多年沉淀,悟空团队打造了一个以拖拉拽为主体、AI能力加持的智能活动中台。 一、悟空系统的诞生背景 悟空系统的诞生背景是2018年vivo互联网业务到了运营时代,进入稳定发展期,但各业务缺少有效的运营工具与手段。因此我们设计开发了一套所见即所得的活动可视化编辑系统,只需要通过 拖 - 拉 - 拽, 即可实现活动快速投放。 本次分享将介绍在活动中台搭建过程中,我们是如何保障千万级活动中台的效率和稳定性,运用SaaS+PaaS的基础架构设计,打造可插拔的适配组件平台,利用渲染引擎、规则引擎、泛化调用、模型抽象、页面静态化等多种技术手段和思维模式,保障活动中台灵活高效、快速交付。 为了实现公司内全业务覆盖,我们通过平台公共组件+营销中台能力提供公共服务。 同时针对业务个性化需求,提供全链路开发工具,达到业务低成本开发,全公司复用的效果。 二、...
- 下一篇
1.3k Star!免费部署私人聊天工具—VoceChat
随着网络的广泛应用,数据安全和隐私保护变得非常重要,已经成为我们日常生活中不可或缺的一部分。在这个信息时代,我们不仅需要享受网络带来的便利,更要关注个人数据的安全性,让数据完全由用户自己掌握。 应用简览 VoceChat 是一款支持独立部署的安全聊天软件。是当今市场上最小、最稳定、最高效的独立聊天服务器支持全程加密传输,读取后可立即刻录。 VoceChat 适用于小型团队内部交流、网站嵌入、私人聊天等场景。 主要功能 支持Markdown格式: 可以在聊天中使用Markdown格式,以便更丰富地编辑和分享文本内容。 数据安全: 系统注重数据安全,采取相应的措施来确保用户的数据在传输和存储过程中得到充分的保护。 支持中英文: 提供中英文双语支持,以满足不同用户的语言需求。 支持第三方登录: 用户可以通过第三方登录方式(如Google、GitHub等)进行账户登录,提高登录的便捷性和选择性。 邀请用户: 用户可以通过应用内的邀请功能,邀请其他用户加入VoceChat,扩大用户社交圈或团队。 支持移动端: VoceChat提供移动端应用,用户可以在手机或其他移动设备上使用应用,方便随时随地进...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Mario游戏-低调大师作品
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路