李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
13.Zookeeper在Kafka中的作用
Leefs
2021-09-28 PM
2805℃
0条
[TOC] ### 前言 本篇针对的是2.8版本之前的Kafka,2.8版本及之后Kafka已经移除了对Zookeeper的依赖,通过KRaft进行自己的集群管理,不过目前只是测试阶段。 ### 一、概述 Apache Kafka是一个使用Zookeeper构建的分布式系统。Zookeeper的主要作用是在集群中的不同节点之间建立协调;如果任何节点失败,我们还使用Zookeeper从先前提交的偏移量中恢复,因为它做周期性提交偏移量工作。 **partition的leader选举过程:** ![13.Zookeeper在Kafka中的作用01.jpg](https://lilinchao.com/usr/uploads/2021/09/3860000583.jpg) **说明** - 从Zookeeper中读取当前分区的所有ISR(in-sync replicas)集合 - 调用配置的分区选择算法选择分区的leader ### 二、作用 #### 2.1 Broker注册 Broker是分布式部署并且相互之间相互独立,但是需要有一个注册系统能够将整个集群中的Broker管理起来,此时就使用到了Zookeeper。在Zookeeper上会有一个专门用来进行Broker服务器列表记录的节点。 #### 2.2 Topic注册 在Kafka中,同一个Topic的消息会被分成多个分区并将其分布在多个Broker上,这些分区信息及与Broker的对应关系也都是由Zookeeper在维护,由专门的节点来记录。 #### 2.3 生产者负载均衡 由于同一个Topic消息会被分区并将其分布在多个Broker上,因此,生产者需要将消息合理地发送到这些分布式的Broker上,那么如何实现生产者的负载均衡,Kafka支持传统的四层负载均衡,也支持Zookeeper方式实现负载均衡。 #### 2.4 消费者负载均衡 与生产者类似,Kafka中的消费者同样需要进行负载均衡来实现多个消费者合理地从对应的Broker服务器上接收消息,每个消费者分组包含若干消费者,每条消息都只会发送给分组中的一个消费者,不同的消费者分组消费自己特定的Topic下面的消息,互不干扰。 #### 2.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 对应消息分区的临时节点上。 #### 2.6 消费进度Offset记录 在消费者对指定消息分区进行消息消费的过程中,需要定时地将分区消息的消费进度Offset记录到Zookeeper上,以便在该消费者进行重启或者其他消费者重新接管该消息分区的消息消费后,能够从之前的进度开始继续进行消息消费。Offset在Zookeeper中由一个专门节点进行记录。节点内容是Offset的值。 #### 2.7 消费者注册 每个消费者服务器启动时,都会到Zookeeper的指定节点下创建一个属于自己的消费者节点。 早期版本的Kafka用zk做meta信息存储,consumer的消费状态,group的管理以及offset的值。考虑到zk本身的一些因素以及整个架构较大概率存在单点问题,新版本中确实逐渐弱化了zookeeper的作用。新的consumer使用了kafka内部的group coordination协议,也减少了对zookeeper的依赖。 *附:* *原文链接地址:http://www.pomit.cn/tr/4103204040256001*
标签:
Kafka
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://www.lilinchao.com/archives/1548.html
上一篇
12.Kafka之offset介绍
下一篇
14.【转载】Kafka事务特性详解
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
标签云
机器学习
队列
数据结构和算法
稀疏数组
Spark RDD
Golang基础
数学
并发线程
Golang
排序
正则表达式
Nacos
锁
HDFS
Azkaban
Beego
Http
SQL练习题
Filter
VUE
国产数据库改造
Livy
Typora
Tomcat
线程池
gorm
GET和POST
DataWarehouse
Python
NIO
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞