转载-zookeeper在kafka中的作用
2019独角兽企业重金招聘Python工程师标准>>>
1)Broker注册
Broker在zookeeper中保存为一个临时节点,节点的路径是/brokers/ids/[brokerid],每个节点会保存对应broker的IP以及端口等信息.
2)Topic注册
在kafka中,一个topic会被分成多个区并被分到多个broker上,分区的信息以及broker的分布情况都保存在zookeeper中,根节点路径为/brokers/topics,每个topic都会在topics下建立独立的子节点,每个topic节点下都会包含分区以及broker的对应信息,例如下图中的状态
3)生产者负载均衡
当Broker启动时,会注册该Broker的信息,以及可订阅的topic信息。生产者通过注册在Broker以及Topic上的watcher动态的感知Broker以及Topic的分区情况,从而将Topic的分区动态的分配到broker上.
4)消费者
kafka有消费者分组的概念,每个分组中可以包含多个消费者,每条消息只会发给分组中的一个消费者,且每个分组之间是相互独立互不影响的。
5)消费者与分区的对应关系
对于每个消费者分组,kafka都会为其分配一个全局唯一的Group ID,分组内的所有消费者会共享该ID,kafka还会为每个消费者分配一个consumer ID,通常采用hostname:uuid的形式。在kafka的设计中规定,对于topic的每个分区,最多只能被一个消费者进行消费,也就是消费者与分区的关系是一对多的关系。消费者与分区的关系也被存储在zookeeper中节点的路劲为 /consumers/[group_id]/owners/[topic]/[broker_id-partition_id],该节点的内容就是消费者的Consumer ID
6)消费者负载均衡
消费者服务启动时,会创建一个属于消费者节点的临时节点,节点的路径为 /consumers/[group_id]/ids/[consumer_id],该节点的内容是该消费者订阅的Topic信息。每个消费者会对/consumers/[group_id]/ids节点注册Watcher监听器,一旦消费者的数量增加或减少就会触发消费者的负载均衡。消费者还会对/brokers/ids/[brokerid]节点进行监听,如果发现服务器的Broker服务器列表发生变化,也会进行消费者的负载均衡
7)消费者的offset
在kafka的消费者API分为两种(1)High Level Api:由zookeeper维护消费者的offset (2) Low Level API,自己的代码实现对offset的维护。由于自己维护offset往往比较复杂,所以多数情况下都是使用High Level的APIoffset在zookeeper中的节点路径为/consumers/[group_id]/offsets/[topic]/[broker_id-part_id],该节点的值就是对应的offset
二、kakfa在zookeeper中的结构
kafka.javaapi.consumer.ZookeeperConsumerConnector.java
/**
* This class handles the consumers interaction with zookeeper
*
* Directories:
* 1. Consumer id registry:
* /consumers/[group_id]/ids[consumer_id] -> topic1,...topicN
* A consumer has a unique consumer id within a consumer group. A consumer registers its id as an ephemeral znode
* and puts all topics that it subscribes to as the value of the znode. The znode is deleted when the client is gone.
* A consumer subscribes to event changes of the consumer id registry within its group.
*
* The consumer id is picked up from configuration, instead of the sequential id assigned by ZK. Generated sequential
* ids are hard to recover during temporary connection loss to ZK, since it's difficult for the client to figure out
* whether the creation of a sequential znode has succeeded or not. More details can be found at
*
* 2. Broker node registry:
* /brokers/[0...N] --> { "host" : "host:port",
* "topics" : {"topic1": ["partition1" ... "partitionN"], ...,
* "topicN": ["partition1" ... "partitionN"] } }
* This is a list of all present broker brokers. A unique logical node id is configured on each broker node. A broker
* node registers itself on start-up and creates a znode with the logical node id under /brokers. The value of the znode
* is a JSON String that contains (1) the host name and the port the broker is listening to, (2) a list of topics that
* the broker serves, (3) a list of logical partitions assigned to each topic on the broker.
* A consumer subscribes to event changes of the broker node registry.
*
* 3. Partition owner registry:
* /consumers/[group_id]/owner/[topic]/[broker_id-partition_id] --> consumer_node_id
* This stores the mapping before broker partitions and consumers. Each partition is owned by a unique consumer
* within a consumer group. The mapping is reestablished after each rebalancing.
*
* 4. Consumer offset tracking:
* /consumers/[group_id]/offsets/[topic]/[broker_id-partition_id] --> offset_counter_value
* Each consumer tracks the offset of the latest message consumed for each partition.
*
*/
欢迎工作一到五年的Java工程师朋友们加入Java架构开发:855801563
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代
转载于:https://my.oschina.net/u/3959491/blog/2252432
转载-zookeeper在kafka中的作用相关推荐
- Zookeeper在Kafka中的作用
文章目录 1. Broker注册 2. Topic注册 3. __consumer_offsets偏移量 4. 其他信息 5. Broker Controller选举 6. 负载均衡 6.1 生产者负 ...
- 大数据技术之kafka (第 3 章 Kafka 架构深入) Zookeeper 在 Kafka 中的作用
Kafka 集群中有一个 broker 会被选举为 Controller,负责管理集群 broker 的上下线,所有 topic 的分区副本分配和 leader 选举等工作. Controller 的 ...
- Zookeeper在Dubbo中的作用及Zk集群的选举原理
强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan Zk在Dubbo中的作用 zk在dubbo中是服务注册与发现的注册中心,dubbo的调用过程是c ...
- zookeeper在Hbase中的作用
zk在Hbase中的作用 我们知道Hbase集群中主要组件有Hmaster,RegionServer 和 Zookeeper.Hbase强依赖于zk. 在HBase中,ZooKeeper在 Maste ...
- [转载]傅立叶变换在图像处理中的作用
原文地址:傅立叶变换在图像处理中的作用作者:白屋顶黑乌鸦 从现代数学的眼光来看,傅里叶变换是一种特殊的积分变换.它能将满足一定条件的某个函数表示成正弦基函数的线性组合或者积分.在不同的研究领域,傅里叶 ...
- ZooKeeper在分布式应用中的作用
作者:陈叶皓(携程邮轮研发部软件架构师) 是不是要在标题的"作用"之前加上"重要"两个字,我犹豫了一下,zookeeper提供的功能是如此的重要,以至于如果你在 ...
- zookeeper在Dubbo中的作用
为什么80%的码农都做不了架构师?>>> 流程: 1.服务提供者启动时向/dubbo/com.foo.BarService/providers目录下写入URL 2.服务消费者启 ...
- kafka key的作用_kafka系列(kafka端到端原理分析)
Kafka 端到端源码解析 Kafka的场景 Kafka概念 Topic 创建与删除 Topic状态流转 一些问题 Topic分区初始化选择 kafka producer解析 1. 发送流程 2. 分 ...
- Kafka中zookeeper的作用详解(7点)
Kafka集群中有一个broker会被选举为Controller,负责管理集群broker的上下线,所有topic的分区副本分配和leader选举等工作.Controller的管理工作都是依赖于Zoo ...
最新文章
- [JOISC2014]バス通学
- matlab定积分上界求解,定积分问题的数值求解及Matlab实现.pdf
- python open方法下file模块_python 文件操作
- 【Python】详解Pandas与Lambda结合进行高效数据分析
- 物理DG主备库切换时遇到ORA-16139: media recovery required错误
- 【BCH码1】系统BCH码编码原理及MATLAB实现(不使用MATLAB库函数)
- FreeSWITCH的TLS加密
- C语言学习4(数据的输入与输出)
- BZOJ4552: [Tjoi2016Heoi2016]排序
- keepalived 非抢占模式
- 中柏平板触摸驱动_华北工控 | 工业平板电脑在医院自助设备中的广泛应用
- Dubbo源码解读:appendAnnotation [01]
- f分布表完整图a=0.01_基于时频分布和CNN的信号调制识别分类方法
- 香蕉树上第六根芭蕉——PCA算法python实现和思考-站在巨人肩膀上
- 微信开放平台开发者认证
- 【接口时序】5、QSPI Flash的原理与QSPI时序的Verilog实现(转载)https://www.cnblogs.com/liujinggang/p/9651170.html
- http服务器常见状态码
- 电信运营商云计算战略和发展现状
- Mac使用Charles抓包
- SQL中查询按季度分组的数据