这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天
今天整理了消息队列相关的学习笔记。
什么是消息队列?
消息队列(MQ),指保存消息的一个容器,本质是个队列。但是这个队列需要支持高吞吐,高并发,并且高可用。
消息队列——Kafka
使用场景
如何使用Kafka
创建集群 -> 新增Topic -> 编写生产者逻辑 -> 编写消费者逻辑
Broker——磁盘结构
移动磁头找到对应磁道,磁盘转动,找到对应扇区,最后写入。寻道成本较高,因此顺序写可以减少寻道所带来的时间成本。
Broker 消息文件结构
Broker如何找到消息
Consumer通过发送FetchRequest请求消息数据,Broker会将指定Offset处的消息,按照时间窗口和消息大小窗口发送给Consumer,寻找数据这个戏界是如何做到的呢?
Broker——传统数据拷贝
Consumer——Low Level
通过手动进行分配,哪一个Consumer消费哪一个Partition完全由业务来决定。
Consumer——High Level
Consumer Rebalance
Kafka——数据复制问题
Kafaka——重启操作
Kafka——替换、扩容、缩容
Kafka——负载不均衡
Kafaka——问题总结
- 运维成本高
- 对于负载不均衡的场景,解决方案复杂
- 没有自己的缓存,完全依赖Page Cache
- Controller 和 Coordinator 和 Broker 在同一进程中,大量 IO 会造成其性能下降