这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
消息队列(MQ),指保存消息的一个容器,本质是个队列。但这个队列需要支持高吞吐,高并发,并且高可用。
1.前世今生
2.消息队列-Kafka
如何使用Kafka
- 创建集群
- 新增Topic
需要在这个集群中创建一个Topic 3. 编写生产者逻辑
引入对应语言的SDK,配置好集群和Topic等参数,初始化一个生产者,调用Send方法,将你的Hello World发送出去 4. 编写消费者逻辑
引入对应语言的SDK,配置好集群和Topic等参数,初始化一个消费者,调用Poll方法,你将收到你刚刚发送的Hello World
Offest:消息在partition内的相对位置,可以理解为唯一ID,在partition内部严格递增。
以顺序写的方式写入以提高写入效率
如果我们对一个机器进行重启。首先,我们会关闭一个Broker ,此时如果该Broker上存在副本的leader,,那么该副本将发生leader切换,切换到其他节点上面并且在ISR中的Follow副本,可从看到图中是切换到了第二个Broker上面。
而此时,因为数据在不断的写入,对于刚刚关闭重启的Broker来说,和新Leader之间一定会存在数据的滞后,此时这个Broker会追赶数据,重新加入到SR当中。
当数据追赶完成之后,我们需要回切leader,这一步叫做prefer leader,,这一步的目的是为了避免,在一个集群长期运行后,所有的leader都分布在少数节点上,导致数据的不均衡。
间过上面的一个流程分析,我们可以发现对于一个Broker的重启来说,需要进行数接复制,所以时间成本会比较大,比如一个节点重启需要10分钟,一个集群有1000个节点,那么该集群需要重启升级,则需要10000分钟,那差不多就是一个星期。