这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
消息队列的前世今生
- TIB,诞生于1985年,服务于金融机构和新闻机构。
- IBM MQ/WebSphere,诞生于1993年,商业消息队列平台市场主要玩家。
- MSMQ,微软发布于1997年。
- JMS,诞生于2001年本质上是一套Java API。
- AMQP/RabbitMQ,规范发布于2004年,同年,RabbitMQ面市。
- Kafka,2010年由Linked开源。
- RocketMQ,2011年阿里中间件团队自研。
- Pulsar,2012年诞生于Yahoo内部。
业界消息队列对比
- Kafka: 分式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色。
- RocketMQ: 低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实时场景中运用较广。
- Pulsar: 是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体、采用存算分离的架构设计。
- BMQ: 和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的Kafka集群。
Kafka简介
基本概念
- Topic: Kakfa中的逻辑队列,可以理解成每一个不同的业务场景就是一个不同的topic,对于这个业务来说,所有的数据都存储在这个topic中。
- Cluster: Kafka的物理集群,每个集群中可以新建多人不同的topic。
- Producer: 顾名思义,也就是消息的生产端,负责将业务消息发送到Topic当中。
- Consumer: 消息的消费端,负责消费已经发送到topic中的消息。
- Partition: 通常topic会有多个分片,不同分片直接消息是可以并发来处理的,这样提高单个Topic的吞吐。
架构缺点
- 运维成本高。
- 对于负载不均衡的场景,解决方案复杂。
- 没有自己的缓存,完全依赖Page Cache。
- Controller 和 Coordinator和Broker 在同一进程中,大量 I0会造成其性能下降。
BMQ简介
BMO兼容Kaka协议,存算分离,云原生消息队列,初期定位是承接高吞的离线业务场景,逐步替换掉对应的Kaka集群。
架构设计
高级特性:泳道->Databus->Mirror->Index->Parquet
RocketMQ简介
架构设计
数据流通过Producer发送给Broker集群,再由Consumer进行消费。
Broker节点有Master和Slave的概念。
NameServer为集群提供轻量级服务发现和路由。
高级特性:事务消息、重试和死信队列、延迟队列。