其他分享
首页 > 其他分享> > KAFKA 进阶:【十六】能否说一下 kafka 中 zk 有哪些作用?

KAFKA 进阶:【十六】能否说一下 kafka 中 zk 有哪些作用?

作者:互联网

大家好,这是一个为了梦想而保持学习的博客。这个专题会记录我对于 KAFKA 的学习和实战经验,希望对大家有所帮助,目录形式依旧为问答的方式,相当于是模拟面试。


一、概述


我们知道,在 2.8 版本之前,kafka 都是强依赖于 zk 的;
哪怕是目前的 2.8 版本去 zk 也只是试用功能,官方也不推荐在生产环境使用,因为有很多依托于 zk 的功能都无法使用了,例如 acl。
因此,这一节我们就快速的回顾一下 kafka 中是如何使用 zk 的,温故而知新嘛~


二、zk 有哪些常见的作用?

我们先来列一列,zk 作为分布式协调器,常见的作用有哪些?
1、分布式组件间的数据通信
2、集中式的元数据管理
3、服务发现 / 注册中心
4、HA 自动选主
5、分布式锁

我们从之前的文章中可以知道,kafka 对上述 zk 的功能使用到的有:
1、分布式组件间的数据通信:ISR 更新过程中的数据通信
2、集中式的元数据管理:元数据分层管理
3、HA 自动选主:controller 的自动选主

下面就逐一复习和回顾一下这些过程。


三、ISR 的更新过程中 zk 起到的作用

我们可以简单的概述一下:
ISR 更新过程中,先是更新了 ISR 的元数据信息,然后把更新动作写到了 notification 节点上,
最后由 controller 节点感知到 notification 节点的变化后,开始进行集群内的元数据更新。
这便是由【Node 节点数据存储 + Watcher 回调机制】 实现的一个经典的组件之间数据通信的使用案例。
具体细节,大家可以回顾一下:KAFKA 入门:【六】能否深入聊一下 ISR 的伸缩过程?


四、元数据管理时 zk 起到的作用

概述一下:
kafka 的元数据管理,是进行分层管理的,也就是大体上分为 cluster -> broker -> topic -> partition -> state -> isr ...
那么 zk 的树形数据结构,就天然适用于这种形式的数据保存。
同时,zk 还可以保障元数据的顺序一致性,以及数据的持久性,这都得益于 zk 原本的机制。
而且,由于 zk 的 Watcher 回调机制,还可以很快的感知到元数据信息的变化,从而快速的去更新集群内的元数据,让各个 broker 快速更新最新的元数据。

但是,也是由于 zk 的实现机制,无法承受大量的并发写操作,因此 zk 只能适用于中小集群的元数据管理,这也是为什么 kafka 要去 zk 的原因之一。
其他的原因的话,主要是考虑到运维成本方面,在强依赖 zk 的场景下,运维人员在使用 kafka 的时候不得不部署维护 zk 集群,因此会增加一定的运维难度和成本。

关于 kafka 的元数据具体细节,大家可以回顾一下:KAFKA 进阶:【十五】能否说一下 kafka 的元数据更新机制?


五、Controller 的 HA 中 zk 起到的作用

概述一下:
我们知道 kafka 集群中只有一个 broker 会被选举成 controller,
那这一个 controller 宕掉之后,就需要重新挑选出一个 broker 成为 controller,
而 kafka 自身在 2.8 之前并没有额外去实现这个动作,而是通过 zk 的【临时节点 + Watcher 机制】去实现的 HA 动作。

具体的过程呢,我们也可以大概复习一下,其实也非常简单
就是在 broker 启动的时候,都会去尝试创建 /controller 这么一个临时节点,由于 zk 的本身机制,哪怕是并发的情况下,也只会有一个 broker 能够创建成功。
因此创建成功的那个就会成为 controller,而其余的 broker 都会对这 controller 节点加上一个 Watcher,
一旦原有的 controller 出问题,临时节点被删除,那么其他 broker 都会感知到从而进行新一轮的竞争,谁先创建那么谁就是新的 controller。
当然,在这个重新选举的过程中,有一些需要 controller 参与的动作就无法进行,例如元数据更新等等。
需要等到 controller 竞争成功并且就绪后才能继续进行,所以 controller 出问题对 kafka 集群的影响是不小的。

另外就是,kafka 在移除 zk 之后,必然就需要自己去实现这么个选举过程,整了个 KRaft 机制,
大意应该也是基于 raft 机制来实现的,不过我没有仔细去看过对应的文章或者代码,大家可以自行查找资料,欢迎一起学习交流~

关于 controller 的机制,大家可以回顾一下:KAFKA 入门:【七】能否说一下 KAFKA 服务端的容灾架构?

标签:进阶,zk,broker,kafka,controller,KAFKA,节点
来源: https://www.cnblogs.com/keepal/p/16341766.html