一、背景
一般大型企业都有中间件开发团队,不管是自研还是对开源的消息队列产品进行二次开发,开源的消息队列是无法满足大企业需要。
二、消息平台核心功能
- 高可用
- 多节点数据一致性(paxos)
- 自适应rebalance
- 高性能事务消息
- 高性能顺序消费
- 通用幂等抽象
- 任意时间延迟队列
- 消息重放
- 死信队列
- 消息堆积
- 低延迟
三、常见的开源消息中间件
- ActiveMQ
- ZeroMQ
- RabbitMQ
- Kafka
- RocketMQ
- Pulsar
- QMQ
- nsq
以上产品并没有满足企业级消息平台的需求 ActiveMQ
已经淘汰,ZeroMQ
并不是一个消息队列产品,最多算一个Rpc,RabbitMQ
、Kafka
不支持事务消息、任意延迟队列、顺序消息rehash
、RabbitMQ进行二次开发难度大,没有集群分片方案,依赖镜像保证可靠性。
四、改造思路
- 客户端改造
- 统一抽象消息队列的客户端,提供事务消息、延迟消息、顺序消息、单向消息、通用幂等处理器的SDK。
- 在client层代理,提供发送前事件、发送后事件、发送异常事件,给予客户端一定的扩展性
- 统一抽象过滤器,由客户端实现对消息的过滤或者增强
- 基于OpenTracing提供TraceContext信息的传递和上报
- 替换底层Rpc框架
- 服务端(平台层)改造
- 统一抽象消息存储,基于Kafka、TiDB对消息进行持久化
- 元数据管理
- 一致性rebalance
- 基于RocksDB的事务消息、延迟消息、死信消息临时存储
- 秒级时间轮定时任务,负责二段事务消息的回调、延迟队列重新投递
- 监控控制台
- 生产消费情况
- 消息堆积
- 接入客户端
- 硬件信息
- 死信消息重新投递
- 重置offset消息重放
- 新增节点