消息队列 | 青训营笔记

74 阅读2分钟

消息队列Kafka Topic: 逻辑队列,不同Topic可以建立不同的Topic

Cluster: 物理集群,每个集群中可以建立多个不同的Topic

Producer: 生产者,负责将业务消息发送到Topic中

  • 批量发送
  • 数据压缩

Consumer: 消费者,负责消费Topic中的消息

ConsumerGroup: 消费者组,不同组Consumer消费进度互不干涉

Offset: 消息在partition内的相对位置信息,可以理解为唯一lD,在partition内部严格递增。

Replica: 每个分片有多个Replica,Leader Replica将会从ISR中选出。

Broker:

  • 采用顺序写的方式进行写入,以提高写入效率

  • 如何找到消息: Consumer通过发送FetchRequest请求消息数据,Broker会将指定Offset处的消息,按照时间窗口和消息大小窗口发送给Consumer,那么是如何寻找到细节的呢:

    • 二分找到小于目标offset的最大文件
    • 二分找到小于目标offset的最大索引位置
    • 二分找到小于目标时间戳最大的索引位置,再通过寻找offset的方式找到最终数据。
  • 零拷贝:将数据在内核空间直接从磁盘文件复制到网卡中,而不需要经由用户态的应用程序之手

image.png

缺点:

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

BMQ

存算分离。兼容Kaka

BMA的重启、替换、扩容、缩容方面都远比Kafka要快,可以在秒级完成这些操作

  • Broker-Partition

保证对于任意分片,在同一时刻只能在一个Broker上存活

  1. 数据校验
  2. 在Buffer读写处完成可以快速吞吐
  3. flush到硬盘,建立索引点和检查点

RocketMQ

为分布式应用系统提供异步解耦和削峰填谷

RockerMQ可以分为Producter,Consumer,Broker三个部分