Kafka集群中有一个broker会被选举为Controller,负责管理集群broker的上下线,所有topic的分区副本分配和leader选举等工作。Controller的管理工作都是依赖于Zookeeper的。此外,zookeeper还负责在Consumer Group发生变化时进行rebalance。下文会从7个方向具体解释这个部分。kafka主要存储在zookeeper的部分如下图所示:

所有topic的分区副本分配和leader选举等工作流程如下:

具体来说,zookeeper主要负责这几个部分:

1.Broker的注册

一台kafka服务器就是一个broker。一个集群由多个broker组成。Broker是分布式部署并且相互之间相互独立,但是需要有一个注册中心对整个集群的Broker进行管理,此时就使用了Zookeeper。在Zookeeper上会有一个专门用来记录Broker服务器列表的节点:/brokers/ids。

Kafka使用了全局唯一的数字来指代每个Broker服务器,不同的Broker必须使用不同的Broker ID进行注册,创建完节点后,每个Broker就会将自己的IP地址 和端口信息记录到该节点中去。其中,Broker创建的节点类型是临时节点,一旦Broker宕机,则对应的临时节点也会被自动删除。这样,我们就可以很方便的监控到Broker节点的变化,及时调整负载均衡等。

2.Topic注册

在zookeeper中,建立专门的节点来记录这些信息,其节点路径为/brokers/topics/{topic_name}。并且topic创建的节点类型也是临时节点

3.生产者负载均衡

同一个Topic消息会被分区并将其分布在多个Broker上。由于每个Broker启动时,都会在Zookeeper上进行注册,生产者会通过该节点的变化来动态地感知到Broker服务器列表的变更,这样就可以实现动态的负载均衡。

4.消费者负载均衡

Kafka中的消费者同样需要进行负载均衡来实现多个消费者合理地从对应的Broker服务器上接收消息,每个消费者分组包含若干消费者,每条消息都只会发送给分组中的一个消费者,不同的消费者分组消费自己特定的Topic下面的消息,互不干扰。每个消费者都需要关注所属消费者分组中其他消费者服务器的变化情况,一旦发现消费者新增或减少,就触发消费者的负载均衡。Kafka有两种分配策略,一是roundrobin,一是range。

5.分区与消费者的关系

在Kafka中,规定了每个消息分区 只能被同组的一个消费者进行消费。一个consumer group中有多个consumer,一个 topic有多个partition,所以必然会涉及到partition的分配问题,即确定那个partition由哪个consumer来消费。因此,需要在 Zookeeper 上记录 消息分区 与 Consumer 之间的关系,每个消费者一旦确定了对一个消息分区的消费权力,需要将其Consumer ID 写入到 Zookeeper 对应消息分区的临时节点上。

分区数大于消费者消费数量时,一个消费者消费几个分区,消费速度会变慢。但分数区小于消费者组消费数量时,会造成部分消费者没有消费,浪费资源。

6.记录消息消费的进度Offset

Kafka 0.9版本之前,consumer默认将offset保存在Zookeeper中,从0.9版本开始,consumer默认将offset保存在Kafka一个内置的topic中,该topic为__consumer_offsets

7.消费者注册

注册新的消费者分组和消费者。

Kafka中zookeeper的作用详解(7点)相关推荐

  1. VMware虚拟机文件夹中各文件作用详解

    VMware虚拟机文件夹中各文件作用详解 虚拟机的文件管理由VMware Workstation来执行. 一个虚拟机一般以一系列文件的形式储存在宿主机中, 这些文件一般在由workstation为虚拟 ...

  2. Java中static的作用详解_详解java中static关键词的作用

    在java中,static是一个修饰符,用于修饰类的成员方法.类的成员变量,另外可以编写static代码块来优化程序性能:被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载 ...

  3. AD使用总结--2__PCB中各层作用详解

    一直以来,对PCB中各层,比如:solder层.paste层.Top overlay层等等这些一知半解.今天仔细看了下,向大家介绍一下,有不对的地方还请指正. 1.mechanical机械层是定义整个 ...

  4. Java中static的作用详解_java中static作用详解

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

  5. python中reload(sys)作用详解

    python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报错UnicodeDecodeError: 'ascii' codec can't decode ...

  6. python中文意思k-对python中的*args与**kwgs的含义与作用详解

    在定义函数的时候参数通常会使用 *args与**kwgs,形参与实参的区别不再赘述,我们来解释一下这两个的作用. *args是非关键字参数,用于元组,**kw是关键字参数 例如下面的代码 def fo ...

  7. 正则表达式中模式修正符作用详解(i、g、m、s、x、e)

    正则表达式中常用的模式修正符有i.g.m.s.x.e等.它们之间可以组合搭配使用. 它们的作用如下: //修正符:i 不区分大小写的匹配; //如:"/abc/i"可以与abc或a ...

  8. 台式win7f1到f12热键取消_Windows 7旗舰版系统中键盘F1到F12快捷键的作用详解

    Windows 7旗舰版系统中键盘F1到F12快捷键的作用详解跟大家分享,在键盘上面大家都知道最上面有一排F1到F2的按键,这些是windows的功能键,可以提供我们一些通常的快捷操作,如果你掌握了这 ...

  9. python什么意思k_对python中的*args与**kwgs的含义与作用详解

    对python中的*args与**kwgs的含义与作用详解 在定义函数的时候参数通常会使用 *args与**kwgs,形参与实参的区别不再赘述,我们来解释一下这两个的作用. *args是非关键字参数, ...

最新文章

  1. 结合项目实例 回顾传统设计模式(九)迭代器模式
  2. 巴克码相关器的verilog HDL设计
  3. 深度剖析Kubernetes API Server三部曲 - part 1
  4. Java基础day4
  5. 为终端服务连接配置网络级身份验证
  6. mysql c 中文字符串_MySQL字符集中文乱码终极解决方案和mysql查询中文问题解决方法...
  7. leetcode76. Minimum Window Substring
  8. MySQL配置文件简单解析
  9. 五子棋java源代码博客园_来来来,五子棋源代码
  10. html5 天地图,天地图API
  11. js实现通知弹屏 Notification
  12. 维基百科--文件系统大全
  13. java微博分享代码实例
  14. C. Qualification Rounds(状压思维)
  15. 计算机控制台什么意思,什么叫控制台?
  16. 【python】PyQt6和pyqt6-tools在PyCharm2021的详细配置方法
  17. 四旋翼无人机硬件,飞控,基站,NX
  18. 编译小度deng wifi源码出错
  19. linux防误删工具trash-cli
  20. 小i机器人Bot开放平台如何帮企业自建“金牌客服”?

热门文章

  1. 对比灵敏度丨信噪比 - 开会用的全向麦克风应该怎么选?
  2. 有趣的设计模式——微信公众号中蕴藏的观察者模式
  3. 进制为2的10次方的世界
  4. 使用Excel对国外B2B电商平台进行描述性数据分析
  5. 《一往无前》10岁的小米,给世界讲了一个怎样的故事?
  6. Python个人常见语法问题
  7. 天线学习笔记——串馈网络设计
  8. 【无标题】人工智能的定义
  9. windows获取iOS设备信息
  10. MAC 安装windows