消息队列原理与实战 | 青训营笔记

45 阅读2分钟

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

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

1.前世今生

image.png

image.png

2.消息队列-Kafka

image.png

如何使用Kafka

  1. 创建集群
  2. 新增Topic

需要在这个集群中创建一个Topic 3. 编写生产者逻辑

引入对应语言的SDK,配置好集群和Topic等参数,初始化一个生产者,调用Send方法,将你的Hello World发送出去 4. 编写消费者逻辑

引入对应语言的SDK,配置好集群和Topic等参数,初始化一个消费者,调用Poll方法,你将收到你刚刚发送的Hello World

image.png

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

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

以顺序写的方式写入以提高写入效率

image.png

image.png

如果我们对一个机器进行重启。首先,我们会关闭一个Broker ,此时如果该Broker上存在副本的leader,,那么该副本将发生leader切换,切换到其他节点上面并且在ISR中的Follow副本,可从看到图中是切换到了第二个Broker上面。

而此时,因为数据在不断的写入,对于刚刚关闭重启的Broker来说,和新Leader之间一定会存在数据的滞后,此时这个Broker会追赶数据,重新加入到SR当中。

当数据追赶完成之后,我们需要回切leader,这一步叫做prefer leader,,这一步的目的是为了避免,在一个集群长期运行后,所有的leader都分布在少数节点上,导致数据的不均衡。

间过上面的一个流程分析,我们可以发现对于一个Broker的重启来说,需要进行数接复制,所以时间成本会比较大,比如一个节点重启需要10分钟,一个集群有1000个节点,那么该集群需要重启升级,则需要10000分钟,那差不多就是一个星期。

image.png