您当前的位置:首页 > 生活百科 > 职场

kafka面试题:Zookeeper 在 Kafka 中的作用

时间:2020-06-15 23:14:31  来源:  作者:

 

kafka面试题:Zookeeper 在 Kafka 中的作用

 

如上图所示,kafaka集群的 broker,和 Consumer 都需要连接 Zookeeper。 Producer 直接连接 Broker。

Producer 把数据上传到 Broker,Producer可以指定数据有几个分区、几个备份。上面的图中,数据有两个分区 0、1,每个分区都有自己的副本:0'、 1'。

黄色的分区为 leader,白色的为 follower。

leader 处理 partition 的所有读写请求,与此同时,follower会被动定期地去复制leader上的数据。 如下图所示,红色的为 leader,绿色的为 follower,leader复制自己到其他 Broker 中:

kafka面试题:Zookeeper 在 Kafka 中的作用

 


如果leader发生故障或挂掉,一个新leader被选举并接收客户端的消息。Kafka确保从同步副本列表中选举一个副本为 leader。
关于follower 的同步机制可参考:
https://blog.csdn.net/lizhitao/article/details/51718185

Topic 分区被放在不同的 Broker 中,保证 Producer 和 Consumer 错开访问 Broker,避免访问单个 Broker造成过度的IO压力,使得负载均衡。

Zookeeper 在 Kafka 中的作用

1、Broker注册

Broker是分布式部署并且相互之间相互独立,但是需要有一个注册系统能够将整个集群中的Broker管理起来,此时就使用到了Zookeeper。在Zookeeper上会有一个专门用来进行Broker服务器列表记录的节点:

/brokers/ids

每个Broker在启动时,都会到Zookeeper上进行注册,即到/brokers/ids下创建属于自己的节点,如/brokers/ids/[0...N]。

Kafka使用了全局唯一的数字来指代每个Broker服务器,不同的Broker必须使用不同的Broker ID进行注册,创建完节点后,每个Broker就会将自己的IP地址和端口信息记录到该节点中去。其中,Broker创建的节点类型是临时节点,一旦Broker宕机,则对应的临时节点也会被自动删除。

2、Topic注册

在Kafka中,同一个Topic的消息会被分成多个分区并将其分布在多个Broker上,这些分区信息及与Broker的对应关系也都是由Zookeeper在维护,由专门的节点来记录,如:

/borkers/topics

Kafka中每个Topic都会以/brokers/topics/[topic]的形式被记录,如/brokers/topics/login和/brokers/topics/search等。Broker服务器启动后,会到对应Topic节点(/brokers/topics)上注册自己的Broker ID并写入针对该Topic的分区总数,如/brokers/topics/login/3->2,这个节点表示Broker ID为3的一个Broker服务器,对于"login"这个Topic的消息,提供了2个分区进行消息存储,同样,这个分区节点也是临时节点。

3、生产者负载均衡

由于同一个Topic消息会被分区并将其分布在多个Broker上,因此,生产者需要将消息合理地发送到这些分布式的Broker上,那么如何实现生产者的负载均衡,Kafka支持传统的四层负载均衡,也支持Zookeeper方式实现负载均衡。

(1) 四层负载均衡,根据生产者的IP地址和端口来为其确定一个相关联的Broker。通常,一个生产者只会对应单个Broker,然后该生产者产生的消息都发往该Broker。这种方式逻辑简单,每个生产者不需要同其他系统建立额外的TCP连接,只需要和Broker维护单个TCP连接即可。但是,其无法做到真正的负载均衡,因为实际系统中的每个生产者产生的消息量及每个Broker的消息存储量都是不一样的,如果有些生产者产生的消息远多于其他生产者的话,那么会导致不同的Broker接收到的消息总数差异巨大,同时,生产者也无法实时感知到Broker的新增和删除。

(2) 使用Zookeeper进行负载均衡,由于每个Broker启动时,都会完成Broker注册过程,生产者会通过该节点的变化来动态地感知到Broker服务器列表的变更,这样就可以实现动态的负载均衡机制。

4、消费者负载均衡

与生产者类似,Kafka中的消费者同样需要进行负载均衡来实现多个消费者合理地从对应的Broker服务器上接收消息,每个消费者分组包含若干消费者,每条消息都只会发送给分组中的一个消费者,不同的消费者分组消费自己特定的Topic下面的消息,互不干扰。

5、分区 与 消费者 的关系

消费组 (Consumer Group): consumer group 下有多个 Consumer(消费者)。 对于每个消费者组 (Consumer Group),Kafka都会为其分配一个全局唯一的Group ID,Group 内部的所有消费者共享该 ID。订阅的topic下的每个分区只能分配给某个 group 下的一个consumer(当然该分区还可以被分配给其他group)。 同时,Kafka为每个消费者分配一个Consumer ID,通常采用"Hostname:UUID"形式表示。

在Kafka中,规定了每个消息分区 只能被同组的一个消费者进行消费,因此,需要在 Zookeeper 上记录 消息分区 与 Consumer 之间的关系,每个消费者一旦确定了对一个消息分区的消费权力,需要将其Consumer ID 写入到 Zookeeper 对应消息分区的临时节点上,例如:

/consumers/[group_id]/owners/[topic]/[broker_id-partition_id]

其中,[broker_id-partition_id]就是一个 消息分区 的标识,节点内容就是该 消息分区 上 消费者的Consumer ID。

6、消息 消费进度Offset 记录

在消费者对指定消息分区进行消息消费的过程中,需要定时地将分区消息的消费进度Offset记录到Zookeeper上,以便在该消费者进行重启或者其他消费者重新接管该消息分区的消息消费后,能够从之前的进度开始继续进行消息消费。Offset在Zookeeper中由一个专门节点进行记录,其节点路径为:

/consumers/[group_id]/offsets/[topic]/[broker_id-partition_id]

节点内容就是Offset的值。

7、消费者注册

消费者服务器在初始化启动时加入消费者分组的步骤如下

注册到消费者分组。每个消费者服务器启动时,都会到Zookeeper的指定节点下创建一个属于自己的消费者节点,例如/consumers/[group_id]/ids/[consumer_id],完成节点创建后,消费者就会将自己订阅的Topic信息写入该临时节点。

对 消费者分组 中的 消费者 的变化注册监听。每个 消费者 都需要关注所属 消费者分组 中其他消费者服务器的变化情况,即对/consumers/[group_id]/ids节点注册子节点变化的Watcher监听,一旦发现消费者新增或减少,就触发消费者的负载均衡。

对Broker服务器变化注册监听。消费者需要对/broker/ids/[0-N]中的节点进行监听,如果发现Broker服务器列表发生变化,那么就根据具体情况来决定是否需要进行消费者负载均衡。

进行消费者负载均衡。为了让同一个Topic下不同分区的消息尽量均衡地被多个 消费者 消费而进行 消费者 与 消息 分区分配的过程,通常,对于一个消费者分组,如果组内的消费者服务器发生变更或Broker服务器发生变更,会发出消费者负载均衡。

以下是kafka在zookeep中的详细存储结构图:

kafka面试题:Zookeeper 在 Kafka 中的作用

 

补充

早期版本的 kafka 用 zk 做 meta 信息存储,consumer 的消费状态,group 的管理以及 offse t的值。考虑到zk本身的一些因素以及整个架构较大概率存在单点问题,新版本中确实逐渐弱化了zookeeper的作用。新的consumer使用了kafka内部的group coordination协议,也减少了对zookeeper的依赖

 



Tags:kafka面试题   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
如上图所示,kafaka集群的 broker,和 Consumer 都需要连接 Zookeeper。 Producer 直接连接 Broker。Producer 把数据上传到 Broker,Producer可以指定数据有几个分区、几个备份...【详细内容】
2020-06-15  Tags: kafka面试题  点击:(125)  评论:(0)  加入收藏
▌简易百科推荐
毕业后不重视自己的档案,等到考研、考编、考公务员、单位入职等需要用到档案时,才想起来查询自己的档案。但是,很多人查询档案没有经验,不知道该从何查起。下面给大家介绍查询个...【详细内容】
2021-12-23  帮帮团人力资源    Tags:个人档案   点击:(14)  评论:(0)  加入收藏
评职称可谓是工程人事业发展中的一件大事了,可以说一般想要在行业中持续地、更好地发展的人都会选择评个中级职称! 怎么评广东省建筑中级职称? 在评审时工程业绩最为重要。那...【详细内容】
2021-12-23  资深职称老师—小丽    Tags:职称   点击:(4)  评论:(0)  加入收藏
职场中,事情做得漂亮,不一定结局漂亮;但是善于谋人,把人打通了,出手一般就是巅峰。人情社会尤其如此,说到底工作是人定的,好不好也是人说的,有人为你说话,你就是能力强。没人看到你,工...【详细内容】
2021-12-22  胖子说职场经验    Tags:职场   点击:(4)  评论:(0)  加入收藏
一、在国企,能改变命运的只有你自己。你想改变,就总有办法。你认命,就不要埋怨命运不公。多少领导一样是从基层爬上去的。也许你会说,他们背后有人。我也不反对,但总有那么20%左...【详细内容】
2021-12-21  职场真谛    Tags:国企   点击:(6)  评论:(0)  加入收藏
又到年底了,有更好的工作选择?想跳槽?社保咋处理?以及社保需要注意的小问题是什么?一文全理清!一、打工人离职手册之社保全指南 二、需要注意的社保小问题 ...【详细内容】
2021-12-17  恒企会计网校    Tags:离职指南   点击:(6)  评论:(0)  加入收藏
在个案辅导中,也经常遇到公务员面试前的准备和辅导。首先,我其实挺想吐槽公考的笔试和考试机制的,让我先一吐为快。公务员考察的面非常多,从表达能力这种表面的,到价值观这种底层...【详细内容】
2021-12-14  为好优姐姐    Tags:公务员面试   点击:(12)  评论:(0)  加入收藏
公务员面试形式进行了创新,增加了结构化小组面试这一形式,在结构化的基础上增加了考试互评和回应的环节,这一改变增加了考试难度,也给许多考试造成了困惑,那今天就结构化小组的点...【详细内容】
2021-12-14  红河华图教育    Tags:公务员面试   点击:(14)  评论:(0)  加入收藏
在各级党政机构之中,我们经常会听到一个称呼——“常务副职”,例如县政府有常务副县长,组织部有常务副部长等等。其实,常务副职只是一个约定俗成的简称,其准确名称叫做...【详细内容】
2021-12-14  瑛杰小猪  今日头条  Tags:常务副职   点击:(19)  评论:(0)  加入收藏
在职场,什么都可以没有,就是不能没有情商。没有情商的人,在职场注定难成大器。人际关系搞不定,说话口无遮拦,为人处世更是不够圆滑,处处受限,处处是破绽。尤其是和领导相处,连对方的...【详细内容】
2021-12-14  第一桶金学派    Tags:领导   点击:(8)  评论:(0)  加入收藏
在职场,除了个人的工作能力以外,还要学会去不断的积累自己的人际关系。因为有了关系,就有了渠道,有了机会,有了方法,有了财富……越是和厉害的人交往,你自己也会变得越...【详细内容】
2021-12-10  第一桶金学派    Tags:职场   点击:(12)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条