zookeeper 是 kafka 不可分割的一部分,可见其重要程度,所以我们有必要了解一下 zookeeper 在 kafka 中的具体工作内容。

而且,这也是面试时经常问的。

zookeeper 存储了一些关于 consumer 和 broker 的信息,那么就从这两方面说明 zookeeper 的作用。

1. broker

  • 状态

zookeeper 记录了所有 broker 的存活状态,broker 会向 zookeeper 发送心跳请求来上报自己的状态。

zookeeper 维护了一个正在运行并且属于集群的 broker 列表。

  • 控制器选举

kafka 集群中有多个 broker,其中有一个会被选举为控制器。

控制器负责管理整个集群所有分区和副本的状态,例如某个分区的 leader 故障了,控制器会选举新的 leader。

从多个 broker 中选出控制器,这个工作就是 zookeeper 负责的。

  • 限额权限

kafka 允许一些 client 有不同的生产和消费的限额。

这些限额配置信息是保存在 zookeeper 里面的。

所有 topic 的访问控制信息也是由 zookeeper 维护的。

  • 记录 ISR

ISR(in-sync replica) 是 partition 的一组同步集合,就是所有 follower 里面同步最积极的那部分。

一条消息只有被 ISR 中的成员都接收到,才被视为“已同步”状态。

只有处于 ISR 集合中的副本才有资格被选举为 leader。

zookeeper 记录着 ISR 的信息,而且是实时更新的,只要发现其中有成员不正常,马上移除。

  • node 和 topic 注册

zookeeper 保存了所有 node 和 topic 的注册信息,可以方便的找到每个 broker 持有哪些 topic。

node 和 topic 在 zookeeper 中是以临时节点的形式存在的,只要与 zookeeper 的 session 一关闭,他们的信息就没有了。

  • topic 配置

zookeeper 保存了 topic 相关配置,例如 topic 列表、每个 topic 的 partition 数量、副本的位置等等。

2. consumer

  • offset

kafka 老版本中,consumer 的消费偏移量是默认存储在 zookeeper 中的。

新版本中,这个工作由 kafka 自己做了,kafka 专门做了一个 offset manager。

  • 注册

和 broker 一样,consumer 也需要注册。

consumer 会自动注册,注册的方式也是创建一个临时节点,consumer down 了之后就会自动销毁。

  • 分区注册

kafka 的每个 partition 只能被消费组中的一个 consumer 消费,kafka 必须知道所有 partition 与 consumer 的关系。

kafka 中 zookeeper 具体是做什么的?的更多相关文章

  1. kafka中zookeeper的操作

    bin/zookeeper-shell.sh localhost:2181 <<< "get /brokers/ids/4" ./zkCli.sh -server ...

  2. ZooKeeper 并不适合做注册中心

    zookeeper 的 CP 模型不适合注册中心 zookeeper 是一个非常优秀的项目,非常成熟,被大量的团队使用,但对于服务发现来讲,zookeeper 真的是一个错误的方案. 在 CAP 模型 ...

  3. Apache ZooKeeper在Kafka中的角色 - 监控和配置

    1.目标 今天,我们将看到Zookeeper在Kafka中的角色.本文包含Kafka中需要ZooKeeper的原因.我们可以说,ZooKeeper是Apache Kafka不可分割的一部分.在了解Zo ...

  4. kafka中server.properties配置文件参数说明

    转自:http://blog.csdn.net/lizhitao/article/details/25667831 参数 说明(解释) broker.id =0 每一个broker在集群中的唯一表示, ...

  5. kafka中的 zookeeper 起到什么作用,可以不用zookeeper么?

    zookeeper 是一个分布式的协调组件,早期版本的kafka用zk做meta信息存储,consumer的消费状态,group的管理以及 offset的值.考虑到zk本身的一些因素以及整个架构较大概 ...

  6. Kafka中操作topic时 Error:Failed to parse the broker info from zookeeper

      Kafka中操作topic时 Error: Failed to parse the broker info from zookeeper 1.问题描述   2.问题原因     kafka在启动后 ...

  7. Kafka学习之路 (五)Kafka在zookeeper中的存储

    一.Kafka在zookeeper中存储结构图 二.分析 2.1 topic注册信息 /brokers/topics/[topic] : 存储某个topic的partitions所有分配信息 [zk: ...

  8. Kafka(四)Kafka在zookeeper中的存储

    一 Kafka在zookeeper中存储结构图 二 分析 2.1 topic注册信息 /brokers/topics/[topic] : 存储某个topic的partitions所有分配信息 [zk: ...

  9. 使用kafka bin目录中的zookeeper-shell.sh来查看kafka在zookeeper中的配置

    cd kafka_2.11-0.10.2.1\bin\windowsecho ls /brokers/ids |  zookeeper-shell.bat localhost:2181 使用kafka ...

随机推荐

  1. 基于ubuntu16的mqtt服务器(apache-apollo1.7.1)

    感谢博客:https://www.cnblogs.com/chenrunlin/p/5109028.html 需要环境: java1.8 把文件通过finalshell扔到/usr/local目录下 ...

  2. <QluOJ2018NewCode>约数个数

    题目描述 p^q表示p的q次方,正整数M可以分解为M=(p1^a1)*(p2^a2)*(p3^a3)*……*(pn^an)的形式,其中p1,p2……pn为质数(大于1并且只能被1和自身整除的数叫做质数 ...

  3. HttpRepl 互操作的 RESTful HTTP 服务调试命令行工具

    今天早上曽根セイラ告诉我一个好用的工具 HttpRepl 这是一个可以在命令行里面对 RESTful 的 HTTP 服务进行路由跳转和访问的命令行工具.可以使用 cd 这个命令和像文件跳转已经跳转到下 ...

  4. vue 数据监听原理

    Vue.prototype.listenDatas = function(){ for(var attr in this.$data){ this.listenData(this,attr,this. ...

  5. KAFKA报错:COMMIT CANNOT BE COMPLETED SINCE THE GROUP HAS ALREADY REBALANCED AND ASSIGNED THE PARTITIONS TO ANOTHER MEMBER

    转载:https://www.greenhtml.com/archives/Commit-cannot-be-completed-since-the-group-has-already-rebalan ...

  6. k8s集群———单master节点2node节点

    #部署node节点 ,将kubelet-bootstrap用户绑定到系统集群角色中(颁发证书的最小权限) kubectl create clusterrolebinding kubelet-boots ...

  7. Linux三剑客之sed的基本用法介绍

    [介绍] sed是一款强大的非交互式的文本编辑器,可以对文件文本进行增删改查的相关操作,本文主要是讲解以下sed的基本用法. [常用选项] -e 下一个参数为一个sed指令,一般只会用于同一行有多个s ...

  8. MapReduce-自动化运行配置

    1.打包时指定main  Class信息 注意:默认直接通过maven插件打成jar包中没有指定main class信息,因此在运行mapreduce的jar包时必须在指令后明确main class信 ...

  9. [Oracle]Oracle的闪回归档

    Oracle的闪回归档 场景需求,由于管理数据库的一些核心表,在实施初期会有人为误删除的问题.Oracle 11gR2提供了闪回归档的特性,可以保证不用RMAN来恢复误删除的数据.实践如下: 1.创建 ...

  10. 1044 火星数字 (20 分)C语言

    火星人是以 13 进制计数的: 地球人的 0 被火星人称为 tret. 地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep ...