消息队列——Kafka | 青训营笔记

51 阅读1分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天

今天整理了消息队列相关的学习笔记。

什么是消息队列?

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

image.png

消息队列——Kafka

使用场景

image.png

如何使用Kafka

创建集群 -> 新增Topic -> 编写生产者逻辑 -> 编写消费者逻辑

Broker——磁盘结构

移动磁头找到对应磁道,磁盘转动,找到对应扇区,最后写入。寻道成本较高,因此顺序写可以减少寻道所带来的时间成本。

image.png

Broker 消息文件结构

image.png

Broker如何找到消息

Consumer通过发送FetchRequest请求消息数据,Broker会将指定Offset处的消息,按照时间窗口和消息大小窗口发送给Consumer,寻找数据这个戏界是如何做到的呢?

image.png

Broker——传统数据拷贝

image.png

Consumer——Low Level

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

image.png

Consumer——High Level

image.png

Consumer Rebalance

image.png

Kafka——数据复制问题

image.png

Kafaka——重启操作

image.png

Kafka——替换、扩容、缩容

image.png

Kafka——负载不均衡

image.png

Kafaka——问题总结

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