8.消息队列 | 青训营笔记

139 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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简介

基本概念 image.png

  • Topic: Kakfa中的逻辑队列,可以理解成每一个不同的业务场景就是一个不同的topic,对于这个业务来说,所有的数据都存储在这个topic中。
  • Cluster: Kafka的物理集群,每个集群中可以新建多人不同的topic。
  • Producer: 顾名思义,也就是消息的生产端,负责将业务消息发送到Topic当中。
  • Consumer: 消息的消费端,负责消费已经发送到topic中的消息。
  • Partition: 通常topic会有多个分片,不同分片直接消息是可以并发来处理的,这样提高单个Topic的吞吐。

架构缺点

  • 运维成本高。
  • 对于负载不均衡的场景,解决方案复杂。
  • 没有自己的缓存,完全依赖Page Cache。
  • Controller 和 Coordinator和Broker 在同一进程中,大量 I0会造成其性能下降。

BMQ简介

BMO兼容Kaka协议,存算分离,云原生消息队列,初期定位是承接高吞的离线业务场景,逐步替换掉对应的Kaka集群。
架构设计 image.png 高级特性:泳道->Databus->Mirror->Index->Parquet

RocketMQ简介

架构设计 image.png 数据流通过Producer发送给Broker集群,再由Consumer进行消费。
Broker节点有Master和Slave的概念。
NameServer为集群提供轻量级服务发现和路由。
高级特性:事务消息、重试和死信队列、延迟队列。

参考

【后端专场 学习资料五】第五届字节跳动青训营 - 掘金 (juejin.cn)