TubeMQ 是腾讯在 2013 年自研的分布式消息中间件系统, 专注服务大数据场景下海量数据的高性能存储和传输, 经过近 7 年上万亿的海量数据沉淀, 目前日均接入量超过 25 万亿条. 较之于众多明星的开源 MQ 组件, TubeMQ 在海量实践 (稳定性 + 性能) 和低成本方面有着比较好的核心优势.
TubeMQ 捐赠 Apache 基金会
9 月 12 日, Apache 软件基金会成立 20 周年之际, 腾讯在 ApacheCon 宣布 TubeMQ 开源. TubeMQ 启动计划捐赠 Apache 基金会的流程.
TubeMQ 系统特点
1. 纯 Java 实现语言
Tube MQ 采用纯 Java 语言开发, 便于开发人员快速熟悉项目及问题处理;
2. 引入 Master 协调节点
相比 Kafka 依赖于 Zookeeper 完成元数据的管理和实现 HA 保障不同, Tube MQ 系统采用的是自管理的元数据仲裁机制方式进行, Master 节点通过采用内嵌数据库 BDB 完成集群内元数据的存储, 更新以及 HA 热切功能, 负责 Tube MQ 集群的运行管控和配置管理操作, 对外提供接口等; 通过 Master 节点, Tube MQ 集群里的 Broker 配置设置, 变更及查询实现了完整的自动化闭环管理, 减轻了系统维护的复杂度;
3. 服务器侧消费负载均衡
Tube MQ 采用的是服务侧负载均衡的方案, 而不是客户端侧操作, 提升系统的管控能力同时简化客户端实现, 更便于均衡算法升级;
4. 系统行级锁操作
对于 Broker 消息读写中存在中间状态的并发操作采用行级锁, 避免重复问题;
5. Offset 管理调整
Offset 由各个 Broker 独自管理, ZK 只作数据持久化存储用(最初考虑完全去掉 ZK 依赖, 考虑到后续的功能扩展就暂时保留);
6. 消息读取机制的改进
Tube MQ 采用的是消息随机读取模式, 同时为了降低消息时延又增加了内存缓存读写, 对于带 SSD 设备的机器, 增加消息滞后转 SSD 消费的处理, 解决消费严重滞后时吞吐量下降以及 SSD 磁盘容量小, 刷盘次数有限的问题, 使其满足业务快速生产消费的需求;
7. 消费者行为管控
支持通过策略实时动态地控制系统接入的消费者行为, 包括系统负载高时对特定业务的限流, 暂停消费, 动态调整数据拉取的频率等;
8. 服务分级管控
针对系统运维, 业务特点, 机器负载状态的不同需求, 系统支持运维通过策略来动态控制不同消费者的消费行为, 比如是否有权限消费, 消费时延分级保证, 消费限流控制, 以及数据拉取频率控制等;
9. 系统安全管控
根据业务不同的数据服务需要, 以及系统运维安全的考虑, Tube MQ 系统增加了 TLS 传输层加密管道, 生产和消费服务的认证, 授权, 以及针对分布式访问控制的访问令牌管理, 满足业务和系统运维在系统安全方面的需求;
10. 资源利用率提升改进
相比于 Kafka,Tube MQ 采用连接复用模式, 减少连接资源消耗; 通过逻辑分区构造, 减少系统对文件句柄数的占用, 通过服务器端过滤模式, 减少网络带宽资源使用率; 通过剥离对 Zookeeper 的使用, 减少 Zookeeper 的强依赖及瓶颈限制;
11. 客户端改进
基于业务使用上的便利性以, 我们简化了客户端逻辑, 使其做到最小的功能集合, 我们采用基于响应消息的接收质量统计算法来自动剔出坏的 Broker 节点, 基于首次使用时作连接尝试来避免大数据量发送时发送受阻.
欢迎开源协同
我们热烈欢迎大家参与到 TubeMQ 及项目各个模块的开源协同中来, 如果在使用 TubeMQ 项目时遇到了问题, 或者对改进 TubeMQ 项目有一个想法, 欢迎提出你的 issue!
TubeMQ 正式开源
GitHub 开源地址:
- https://github.com/Tencent/TubeMQ
- (点击文末阅读原文直接访问)
请给 TubeMQ 一个 Star !
欢迎提出你的 issue 和 PR!
TubeMQ 国内镜像地址: https://git.code.tencent.com/Tencent_Open_Source/TubeMQ
(登录后才能访问公开项目)
腾讯工蜂源码系统为开源开发者提供完整, 最新的腾讯开源项目国内镜像
来源: https://www.qcloud.com/developer/article/1506057