`
gaojingsong
  • 浏览: 1201304 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【zookeeper在kafka中的作用】

阅读更多

一、zookeeper在kafka中的作用

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的API
offset在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
 * (http://wiki.apache.org/hadoop/ZooKeeper/ErrorHandling)
 *
 * 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.
 *
*/

0
0
分享到:
评论

相关推荐

    bitnami版本的zookeeper和kafka的docker-compose配置

    这个Docker Compose 文件定义了一个包含Zookeeper和三个Kafka节点的服务集群。通过指定镜像、端口映射、环境变量和依赖关系等配置,实现了Zookeeper和Kafka的快速部署和集成。同时,在定义了一个名为"mynetwork"的...

    zookeeper、kafka

    在实际应用中,Zookeeper和Kafka的组合可以用于实现多种场景。比如,在日志收集系统中,生产者将系统日志发送到Kafka,然后由多个消费者实时处理这些日志;在实时监控系统中,Zookeeper可以用来协调各个监控节点的...

    zookeeper、kafka集群部署

    zookeeper配置、集群部署 kafka配置、集群部署 Window平台下

    spring+zookeeper+kafka

    在这个过程中,你还需要了解Spring的自动配置原理,以及Zookeeper和Kafka的相关概念,如ZNode、Topic、Partition、Consumer Group等。这有助于理解它们如何协同工作,提升系统的可靠性和效率。 总之,Spring、...

    redhat/centos/linux系统上zookeeper和kafka进程监控脚本

    如下所示,手动指定zookeeper和kafka的bin目录、配置文件以及需要添加定时任务的周期几个参数后,执行当前脚本,脚本会自动添加定时任务并开始监控zookeeper及kafka进程,如果进程不存在则重启并放入后台,存在则...

    kafka2.4.0+zookeeper+kafka-connect集成环境包

    在Kafka中,ZooKeeper用来管理集群的状态,包括选举领导节点、存储和更新broker和topic的信息等。它的存在确保了Kafka集群的稳定性和一致性。 Kafka Connect是一种用于在Kafka与其他系统之间进行大规模、可靠且低...

    kafka(包可zookeeper,kafka,kafkatool套装)

    6. Zookeeper:如前所述,Zookeeper 在Kafka 中的角色至关重要,它用于管理集群的元数据,比如主题和分区的映射,以及选举控制器等。 7. Kafkatool:Kafka 工具通常包括一系列命令行工具,用于与Kafka 集群交互,...

    Zookeeper以及kafka单节点发、服务部署

    ### Zookeeper及Kafka单节点部署详解 #### 一、Zookeeper单节点部署步骤与原理 **1. 安装介质准备** 为了部署Zookeeper单节点环境,首先需要下载安装包,官方提供的下载链接为:...

    zookeeper+kafka.zip windows安装kafka和zookeeper

    在Kafka中,数据是以Topic的形式存在的。要创建一个Topic,可以运行`kafka-topics.sh`脚本: - `.\kafka-topics.bat --create --topic my-topic --partitions 1 --replication-factor 1 --if-not-exists --zookeeper...

    基于Zookeeper搭建Kafka高可用集群

    在构建高可用的Kafka集群时,Zookeeper起到了至关重要的角色。Zookeeper是一个分布式协调服务,它提供了诸如命名服务、配置管理、分布式同步和组服务等功能。Kafka使用Zookeeper来存储元数据,如主题分区分配,以及...

    部署zookeeper+kafka

    一、二进制安装 1.安装jdk,二进制安装以及yum安装 2.安装zookeeper 3.部署kafka 二、docker安装 1.搭建zookeeper集群 2.搭建kafka集群 3.测试Zookeeper中Kafka节点...4.测试Kafka中创建Topic,Zookeeper中的接受情况

    kafka以及依赖安装包jdk+zookeeper+kafka

    **标题与描述解析** 标题"Kafka以及依赖安装包JDK+...理解这些组件的作用和相互关系对于成功部署和管理Kafka集群至关重要。在实际操作中,还需要确保系统满足硬件和网络需求,以及遵循最佳实践来优化性能和稳定性。

    Zookeeper3.7与3.8加kafka2.12-3.1.0

    ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。 Kafka目前主要作为一个分布式的发布订阅式的消息系统使用 本资源包括...

    zookeeper+kafka集群搭建及安装包

    在IT领域,Zookeeper和Kafka是两个非常重要的组件,尤其在大数据处理和实时消息传递中扮演着核心角色。Zookeeper是一个分布式协调服务,而Kafka是一个高吞吐量的分布式发布订阅消息系统。现在,我们将深入探讨这两个...

    Windows zookeeper/kafka开启自启动

    Windows 环境 为zookeeper和kafka配置开机自启动服务。

    flume、zookeeper、kafka、hive、hbase

    flume、zookeeper、kafka、hive、hbase

    zookeeper+kafka

    Zookeeper在Kafka中的作用主要体现在以下几个方面: 1. **集群管理**:Zookeeper帮助Kafka管理其集群的元数据,如 broker 的列表、分区的分配信息等,确保在集群扩展或节点故障时能够自动进行重新分配。 2. **选举...

    Zookeeper 和kafka的安装和配置1

    安装和配置kafka:1 vim config/ server.properties2 数字改成zookeeper对应的myid数字3 是本机ip,端口不要改4

Global site tag (gtag.js) - Google Analytics