TubeMQ的Apache之路

  • 主题回顾
  • TubeMQ相关实现原理及使用介绍
  • TubeMQ后续发展探讨
展开查看详情

1.云+社区技术沙龙

2.TubeMQ的Apache之路 张国成 TubeMQ项目负责人

3.SPEAKER 张国成 TubeMQ项目负责人 腾讯高级工程师,负责TubeMQ项目开发维护工作。

4.CONTENTS 01 主题回顾 02 TubeMQ相关实现原理及使用介绍 03 TubeMQ后续发展探讨

5.主题回顾 —— MQ (Message Queue) 什么是消息队列(中间件)? 为什么要采用消息队列 整合多个不同系统共同协作 大数据场景下消息队列的特点 解耦:数据传递和处理 消息吞吐量的要求高 扩展性&灵活性 水平扩展能力要求高 冗余&复用&故障恢复 不需要支持某些MQ标准协议接口, 峰值处理能力&缓冲 比如:AMQP, STOMP等 异步通信 不要求事务等复杂能力

6.主题回顾 —— TubeMQ简介 万亿级分布式消息中间件,专注服务海量数据的高性能存储和传输,在稳定性、性能以 及成本方面有独特的优势 系统特点 适用场景 高吞吐 低延时 14万TPS 10ms 实时广告推荐 海量数据上报 运行稳定 数据流处理 指标&监控 服务侧管控 近7年

7. 主题回顾 —— TubeMQ系统架构 关键特点 API WEB ✓纯JAVA实现 Portal ✓Master HA协调节点 ✓弱化zk,offset管理去中心化 Master(m) Master(s) ✓支持服务端过滤 Control ✓消息存储模式改进 zk Producer Consumer ✓数据可靠性方案调整:基于磁 盘RAID10多副本+快速消费, 而非多Broker节点多副本方案 Producer ….. Consumer Broker Broker Broker Client ✓负载均衡优化:围绕Master节 Store Client 点重新设计负载均衡算法 信令流 数据流 HTTP命令 ✓基于带SSD硬件的机型存储优化

8.

9.主题回顾 —— 与其它MQ横向比较 比较项 TubeMQ Kafka Pulsar 数据时延 非常低,10ms 比较低,250ms 非常低,10ms https://github.com/Tenc 请求TPS 高,14W+/s 一般,10W+/s 高,14W+/s (高性能场景) ent/TubeMQ/blob/mast er/docs/tubemq_perf_te 过滤消费 支持服务端过滤和客户端过滤 客户端过滤 客户端过滤 st_vs_Kafka_cn.md 无,通过RAID10磁盘备份 + 低 数据副本同步策略 多机异步备份 多机异步备份(高性能场景) 时延消费解决 一般(单机磁盘故障未消费数 一般(主机磁盘故障未同步的 一般(主机磁盘故障未同步的数 数据可靠性 据存在丢失风险) 数据存在丢失风险) 据存在丢失风险) TubeMQ在海量实践(稳定 高,已线上运营近7年,每天33 一般,性能随Topic数增多出 一般,高压下存在性能下降、服 性+性能)和低成本方面有着 系统稳定性 万亿的数据量,已做到单集群 现不稳定情况,没有超大数据 比较好的核心优势,适用 务受阻等情况 400台Broker的线上运营规模 运营规模场景 于: 一般,热备存储,中心化管理, 一般,基于zk配置管理,API 一般,基于zk配置管理,API或页 配置可管理性 - 需要高性能的数据吞 API或页面操作 或页面操作 面操作 吐,允许偶发情况下(硬盘 故障等)少量数据丢失的业 易用性 一般,只提供Java和C++的Lib 高,有很多配套插件使用 高,有很多配套插件使用 务场景

10.主题回顾 —— 为什么要开源 https://github.com/Tencent/TubeMQ 基于公司开源政策号召: 对内开源协同共建 对外构建技术影响力 帮助到有需要的业务: 实践中改进的项目,希望有需要的业务 用起来觉得好用,解决实际的问题 从开源中学习与提升: 通过拥抱开源,让团队学习开源文化、 优化效能,通过更多外部改进建议来提 升系统

11.主题回顾 —— 为什么要捐献给Apache 为什么要捐献? 开源项目 VS. 开源社区 裁判员 vs. 运动员 为什么要捐献给Apache Apache项目以大数据生态圈最为著名 TubeMQ最适宜于大数据场景消息传递 - Hadoop, Spark, HBase, Flink, - TubeMQ受益于Apache项目的支持, Kafka, Pulsar等业界知名的开源大数据项 也希望能将实践成果回馈给Apache社区, 目均是Apache基金会项目 分享给更多有需要的人 TubeMQ当前捐献进展 已通过投票进入孵化池

12. 原理及使用介绍 —— TubeMQ消息存储方案 1. 以Partition为逻辑分区,按Topic组织内存+文件的存储实例 对应MQ存储方案比较 Kafka: Topic 1 - 1 Topic n - m data data data data 内 mem mem 内 mem mem 存 (a) (s) 存 (a) (s) index index index index RocketMQ: 文 data 文 data 件 件 index index 2. 磁盘为主 + SSD为辅的协作消费 JMQ: 消费 生产

13. 原理及使用介绍 —— 存储丢失率方案 1. 以Partition为逻辑分区,按Topic组织内存+文件的存储实例 设计目标: 低成本,速度尽可能快,系统可靠性尽可能高 Topic 1 - 1 Topic n - m 单点数据丢失场景: 内 data data 内 data data - 机器断电,已确认但还未刷盘数据丢失 mem mem mem mem 存 (a) index (s) index 存 (a) index (s) index - Raid10也无法恢复的磁盘故障 丢失率预估: 文 data 文 data 件 件 - 文件pagecache数据丢失; index index - DirectBuffer数据丢失; 按1K字节大小包,每1000条刷盘计算: − 最坏情况:相比不叠加内存多丢20条,若之前为1%丢失 率,则叠加内存后为1.02% − 最好情况:不丢数据 - 通过DirectBuffer隔离写入线程与文件系统的强耦合 − 不宜场景:以TubeMQ做持久缓存反复消费仍要求前后 - 通过写内存即返回,提高写入速度 一致场景 - 通过开放内存读提高消费速度 实施效果: 相比使用Kafka实践方案,可以节约至少4倍的机器量

14.ServiceStatusHolder ServiceStatusHolder 原理及使用介绍 —— 外部API对应关系 . Topic Configure: storeCnt, mem, file . Flow control rule: qryPriorityId=A0B . Broker IOException: Topic 1 - 1 ServiceStatusHolder me data 2 me data 内 3 m m 存 (a) inde (s) inde . Flow control rule: x x type =[1,2,3] 文 1 data 0 : flow-ctrl 件 1: freq-ctrl index . Offset query: 2 : SSD consume mem, disk, group 3 : filter-freq-ctrl . Control rule: - Topic authorize manage - consumeGroup - rebalanceForbidden https://github.com/tencent/TubeMQ - blackList /blob/master/docs/http_access_API_ - groupFilter definition.md

15.原理及使用介绍 —— Master 配置持久化存储: 基于BDB嵌入式数据库进行集群里管理 的Broker节点、各个Broker配置的 Topic信息的数据存储 Broker管理: 围绕状态机进行Broker对外服务启 停、配置变更、节点监控等功能管理 Master集群管理: 通过页面进行Master节点状态查看, 主备节点在线切换操作 消费关系查询: 查看指定Topic或者指定消费组的当前 消费关系

16.原理及使用介绍 —— 认证授权 2. check: authenticate TubeMQ authorize Master 0.1 TubeMQ VisitName, TubeMQ Sigure 0.3 Producer Consumer visitToke n Client 5. check: authenticate authorize TubeMQ Broker visitToken over tcp over tls

17.后续发展探讨 —— 性能及可用性 性能提升: 基于新方案的考虑,包括顺序消费,过 稳定性 滤消费 性 能 更多的接入集成: 围绕大数据场景做生态;依靠社区的力 量将TubeMQ接入到不同的上下游, 成 本 完善接入侧的 完善的文档: 包括项目主页,操作手册等文档的完善 及整理 实际业务使用的推广: 将系统推向不同的厂家,提供给有需要 的人

18.后续发展探讨 —— 完整的接入模式及兼容 TDM SDK 实时推荐 TDBUS XXX MQ SDK Agent Pulsar 离线计算 TDBUS SDK Http TubeMQ SDK 采集 汇聚 缓存 消费

19.后续发展探讨 —— 更多的参与期待 https://github.com/Tencent/TubeMQ

20.T HANKS 关注云加社区公众号