消息队列 | 青训营笔记

74 阅读2分钟

消息队列 | 青训营笔记

消息队列:指保存消息的一个容器,本质是个队列。这个队列需要支持高吞吐,高并发,并且高可用

发展历程

image.png

业界消息队列对比

image.png

Kafka

使用场景

image.png

基本概念

image.png

  • Topic:逻辑队列,不同Topic可以建立不同的Topic。不同的业务可以建立不同的Topic
  • Cluster:物理集群,每个集群中可以建立多个不同的Topic,存放不同的业务数据;
  • Producer:生产者, 负责将业务消息发送到Topic中;
  • Consumer:消费者,负责消费Topic中的消息
  • ConsumerGroup:消费者群,不同组Consumer消费进度互不干涉
  • Partiition:Topic的分区,并发处理消息,提升Topic的吞吐能力

Kafka架构

image.png ZooKeeper:负责存储集群元信息,包括分区分配信息等

一条消息的自述

image.png

  • 当生产者同时发送多条消息时,对信息进行Batch操作,进行批量发送,从而减少IO次数,加强发送能力

Broker消息文件结构

image.png

  • 将消息以日志形式储存,有清除机制

Broker如何找到消息

image.png

  • Consumer通过发送FetchRequest请求消息数据,Broker会指定Offset处的消息,按照时间窗口和消息大小窗口发送给Consumer
  • 用二分法找到小于目标offset的最大索引位置
  • 时间戳索引文件与上面类似

Consumer消息分配

通过手动进行分配,哪一个Consumer消费哪一个Partition完全由业务来决定

image.png 缺点:

  • 有数据中断问题
  • 不能自动容灾

Rebalance:Coordinator协助Consumer来选择分区 image.png

Kafka问题总结

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