一、背景

一般大型企业都有中间件开发团队,不管是自研还是对开源的消息队列产品进行二次开发,开源的消息队列是无法满足大企业需要。

二、消息平台核心功能

  1. 高可用
  2. 多节点数据一致性(paxos)
  3. 自适应rebalance
  4. 高性能事务消息
  5. 高性能顺序消费
  6. 通用幂等抽象
  7. 任意时间延迟队列
  8. 消息重放
  9. 死信队列
  10. 消息堆积
  11. 低延迟

三、常见的开源消息中间件

  1. ActiveMQ
  2. ZeroMQ
  3. RabbitMQ
  4. Kafka
  5. RocketMQ
  6. Pulsar
  7. QMQ
  8. nsq

以上产品并没有满足企业级消息平台的需求 ​​ActiveMQ​​​已经淘汰,​​ZeroMQ​​​并不是一个消息队列产品,最多算一个Rpc,​​RabbitMQ​​​、​​Kafka​​​不支持事务消息、任意延迟队列、顺序消息​​rehash​​、RabbitMQ进行二次开发难度大,没有集群分片方案,依赖镜像保证可靠性。

四、改造思路

  1. 客户端改造
  • 统一抽象消息队列的客户端,提供事务消息、延迟消息、顺序消息、单向消息、通用幂等处理器的SDK。
  • 在client层代理,提供发送前事件、发送后事件、发送异常事件,给予客户端一定的扩展性
  • 统一抽象过滤器,由客户端实现对消息的过滤或者增强
  • 基于OpenTracing提供TraceContext信息的传递和上报
  • 替换底层Rpc框架
  1. 服务端(平台层)改造
  • 统一抽象消息存储,基于Kafka、TiDB对消息进行持久化
  • 元数据管理
  • 一致性rebalance
  • 基于RocksDB的事务消息、延迟消息、死信消息临时存储
  • 秒级时间轮定时任务,负责二段事务消息的回调、延迟队列重新投递
  1. 监控控制台
  • 生产消费情况
  • 消息堆积
  • 接入客户端
  • 硬件信息
  • 死信消息重新投递
  • 重置offset消息重放
  • 新增节点