Metamorphosis是一个高性能、高可用、可扩展的分布式消息中间件,由淘宝通用产品-消息中间件团队开发,思路起源于LinkedIn的Kafka,但并不是Kafka的一个Copy。具有消息存储顺序写、吞吐量大和支持本地和XA事务等特性,适用于大吞吐量、顺序消息、广播和日志数据传输等场景,目前在淘宝和支付宝有着广泛的应用。
特征
- 生产者、服务器和消费者都可分布
- 消息存储顺序写
- 性能极高,吞吐量大
- 支持消息顺序
- 支持本地和XA事务
- 客户端pull,随机读,利用sendfile系统调用,zero-copy ,批量拉数据
- 支持消费端事务
- 支持消息广播模式
- 支持异步发送消息
- 支持http协议
- 支持消息重试和recover
- 数据迁移、扩容对用户透明
- 消费状态保存在客户端
- 支持同步和异步复制两种HA
- 支持group commit
- 更多……
总体结构
内部结构
Broker增加或减少时
当broker server增加或减少时,client会重新进行负载均衡。Broker减少的瞬间,在负载均衡之前,已经发送到减少的那台broker但未到达服务器时,客户端将会捕获到发送异常,由业务决定如何处理,负载均衡之后将正常发送到其他服务器上。