zk相当于是kafka的一个基础设施,了解zk在kafka中的作用,可以对kafka的原理有进一步的了解,现在就开始学习这块的内容,首先从controller看起,这是zk中一个重要的组成:Controller 作为 Kafka Server端一个重要的组件,它的角色类似于其他分布式系统Master的角色,跟其他系统不一样的是,Kafka集群的任何一台Broker都可以作为Controller,但是在一个集群中同时只会有一个 Controller是alive状态。在于分布式系统中,总会有一个地方需要对全局 meta 做一个统一的维护,Kafka 的 Controller 就是充当这个角色的。Controller 是运行在 Broker 上的,任何一台 Broker 都可以作为 Controller,但是一个集群同时只能存在一个 Controller,也就意味着 Controller 与数据节点是在一起的,Controller 做的主要事情如下:

  • Broker 的上线、下线处理;
  • 新创建的 topic 或已有 topic 的分区扩容,处理分区副本的分配、leader 选举;
  • 管理所有副本的状态机和分区的状态机,处理状态机的变化事件;
  • topic 删除、副本迁移、leader 切换等处理。

Broker在启动时,会尝试去ZK创建/controller节点,第一个成功创建/controller节点的Broker会被指定为为控制器。了解了controller之后,通过一个图看在controller在zk整体中的情况:(图来自:https://blog.csdn.net/lizhitao/article/details/23744675)

controller就是zk中的一个节点,谁创建成功了谁就成为控制器,其他还有:

  1. Broker注册:Broker在zookeeper中保存为一个临时节点,节点的路径是/brokers/ids/[brokerid],每个节点会保存对应broker的IP以及端口等信息.

  2. Topic注册:在kafka中,一个topic会被分成多个区并被分到多个broker上,分区的信息以及broker的分布情况都保存在zookeeper中,根节点路径为/brokers/topics,每个topic都会在topics下建立独立的子节点,每个topic节点下都会包含分区以及broker的对应信息

  3. partition状态信息:/brokers/topics/[topic]/partitions/[0…N] 其中[0…N]表示partition索引号

  4. Controller epoch:此值为一个数字,kafka集群中第一个broker第一次启动时为1,以后只要集群中center controller中央控制器所在broker变更或挂掉,就会重新选举新的center controller,每次center controller变更controller_epoch值就会 + 1;

  5. Controller注册信息:存储center controller中央控制器所在kafka broker的信息

  6. 生产者负载均衡:当Broker启动时,会注册该Broker的信息,以及可订阅的topic信息。生产者通过注册在Broker以及Topic上的watcher动态的感知Broker以及Topic的分区情况,从而将Topic的分区动态的分配到broker上.

  7. 消费者:kafka有消费者分组的概念,每个分组中可以包含多个消费者,每条消息只会发给分组中的一个消费者,且每个分组之间是相互独立互不影响的。Consumer注册信息:
    每个consumer都有一个唯一的ID(consumerId可以通过配置文件指定,也可以由系统生成),此id用来标记消费者信息./consumers/[groupId]/ids/[consumerIdString]是一个临时的znode,此节点的值为请看consumerIdString产生规则,即表示此consumer目前所消费的topic + partitions列表.

  8. 消费者与分区的对应关系:对于每个消费者分组,kafka都会为其分配一个全局唯一的Group ID,分组内的所有消费者会共享该ID,kafka还会为每个消费者分配一个consumer ID,通常采用hostname:uuid的形式。在kafka的设计中规定,对于topic的每个分区,最多只能被一个消费者进行消费,也就是消费者与分区的关系是一对多的关系。消费者与分区的关系也被存储在zookeeper中节点的路劲为 /consumers/[group_id]/owners/[topic]/[broker_id-partition_id],该节点的内容就是消费者的Consumer ID

  9. 消费者负载均衡:消费者服务启动时,会创建一个属于消费者节点的临时节点,节点的路径为 /consumers/[group_id]/ids/[consumer_id],该节点的内容是该消费者订阅的Topic信息。每个消费者会对/consumers/[group_id]/ids节点注册Watcher监听器,一旦消费者的数量增加或减少就会触发消费者的负载均衡。消费者还会对/brokers/ids/[brokerid]节点进行监听,如果发现服务器的Broker服务器列表发生变化,也会进行消费者的负载均衡

参考:

https://matt33.com/2018/06/15/kafka-controller-start/

http://zhongmingmao.me/2019/09/18/kafka-controller/

http://gebilaowang.info/2017/01/13/Kafka-Controller/

https://blog.csdn.net/lizhitao/article/details/23744675

https://www.iteye.com/blog/gaojingsong-2314555

kafka中zk的作用相关推荐

  1. Kafka中zookeeper的作用详解(7点)

    Kafka集群中有一个broker会被选举为Controller,负责管理集群broker的上下线,所有topic的分区副本分配和leader选举等工作.Controller的管理工作都是依赖于Zoo ...

  2. kafka中controller的作用_Kafka 常见问题汇总

    Kafka 如何做到高吞吐.低延迟呢? 这里提下 Kafka 写数据的大致方式:先写操作系统的页缓存(Page Cache),然后由操作系统自行决定何时刷到磁盘. 因此 Kafka 达到高吞吐.低延迟 ...

  3. 【Kafka】在Kafka和ZK“分手”之前,来看看Kafka在ZK中到底保存了什么

    在<深入理解Kafka:核心设计与实践原理>一书中,介绍了Kafka的整体架构: Kafka将broker.topic.config等元数据信息存放在zookeeper中(但是随着Kafk ...

  4. 转载-zookeeper在kafka中的作用

    2019独角兽企业重金招聘Python工程师标准>>> 1)Broker注册 Broker在zookeeper中保存为一个临时节点,节点的路径是/brokers/ids/[broke ...

  5. kafka中leader和follower、AR、ISR、OSR、Controller的选举、为什么不能通过ZK的方式来选举partition的leader?

    leader和follower 在Kafka中,每个topic都可以配置多个分区以及多个副本.每个分区都有一个leader以及0个或者多个follower,在创建topic时,Kafka会将每个分区的 ...

  6. [kafka]kafka中的zookeeper是做什么的?

    前言 为什么自己要整理博客和学习笔记呢?是想把知识系统的,有条理的归纳在一起~ 而且一个东西的完成,也很有成就感,还可以打卡某一个知识点. 标红可以快速回忆自己整理过的知识~ ZooKeeper是什么 ...

  7. Kafka 中 SASL ACL SSL 到底分别代表什么意思

    Kafka 中 SASL ACL SSL 分别代表什么意思 auth: huangyichun date: 2023-5-11 序 看各类帖子都没能指出这些到底是什么意思,他们是冲突的,还是互相作用的 ...

  8. Kafka与zk的关系及连接参数bootstrap.server的正确理解

    1.我们知道旧版Kafka,用的是zookeeper地址而非bootstrap.servers, 那么新版 kafka 消费者.生产者配置为何使用 bootstrap-servers 而不是 zook ...

  9. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(九)安装kafka_2.11-1.1.0

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  10. 干趴面试官系列 | 请你简述一下Kafka中的分区分配

    欢迎跳转到本文的原文链接:https://honeypps.com/mq/kafka-basic-knowledge-of-partition-assignors/ "请你简述一下Kafka ...

最新文章

  1. Unix系统编程()虚拟内存管理
  2. 你的专业知识并不等于你的能力——如何提升自我
  3. pandas 索引_Pandas学习笔记03数据清洗(通过索引选择数据)
  4. C语言/C++基础知识
  5. oVirt Reports Portal 3.4 added to ovirt-engine
  6. simulink将值传递给mask封装下的模块
  7. BZOJ1901:Zju2112 Dynamic Rankings——题解
  8. java中while空循环_java – 实现空while循环以保持控制的更好方法
  9. scala 主构造函数_Scala主构造器和辅助构造器
  10. 数字图像处理的起源与应用
  11. 使用 FireDAC的 TFDConnection, TFDQuery 最初只能显示50条记录,TDateSet.RecordCount总是获得50的解决方法。
  12. 给女朋友讲解什么是代理模式 【java3y将东西太有意思了】
  13. 新概念英语第一册单词
  14. SCAPE、BlendSCAPE、SMPL、SMPL-H、SMPL-X、STAR等都是什么?请分别仔细介绍一下
  15. 欧姆龙SYSMAC STUDIO如何与基恩士DL-EP1进行EIP通信
  16. 记一次监控录像断续摄像头时而在线问题
  17. The Missing Semester
  18. 毕业设计 手写数字识别算法研究与实现(源码+论文)
  19. python可以这样学读书笔记_Python 编程:从入门到实战 读书笔记
  20. jenkins流水线构建入门(单机容器形态)

热门文章

  1. MACD-DKJ金叉选股、金蜘蛛选股、均线粘合公式
  2. proposal_target_layer.py (FPN)
  3. python语言书写格式_设置Python代码格式
  4. 汽车电线束双绞线技术参数设定
  5. 欧洲花费210亿欧元新建大型对撞机,我国要跟进吗?
  6. tplink控制上网设备_tp link无线路由器设置里的主人设备 访客网络
  7. img居中以及等比缩放
  8. 获取某网站在alexa上的排名
  9. windows共享 无法访问
  10. office各种格式文件对应的MIME Type/http:Content-Type