Kafka为什么依赖Zookeeper?

article/2025/10/7 4:47:48

前言:在我们了解kafka为什么依赖zookeeper之前,首先要先知道zookeeper自身的一个基础架构和作用

“所有一切的努力都是为了自己的名字”

Zookeeper概念扫盲

基本概述

ZooKeeper是一个分布式协调服务,它的主要作用是为分布式系统提供一致性服务

数据结构

 ZooKeeper的数据存储也同样是基于节点,这种节点叫做Znode。每一个Znode里包含了数据、子节点引用、访问权限等.

  • data即Znode里面的数据
  • ACL为权限规则,它规定了哪些用户或哪些IP才有权限访问此Znode
  • stat记录了Znode相关的元数据,比如事务ID、版本号、时间戳、大小
  • child为当前节点的子节点引用,类似于二叉树的左孩子右孩子

ZooKeeper有个限制,就是每个Znode的数据大小不会超过1M。

节点类型

持久节点:在节点创建后,就一直存在,直到有删除操作来主动清除这个节点——不会因为创建该节点的客户端会话失效而消失。

持久顺序节点:(节点会自动加上编号):额外的特性是,在ZK中,每个父节点会为他的第一级子节点维护一份时序,会记录每个子节点创建的先后顺序.

临时节点:临时节点的生命周期会和客户端会话绑定,即如果客户端会话失效(不是连接端口),那么这个节点就会自动被清除掉。另外,在临时节点下面无法创建子节点。

临时顺序节点:此节点是属于临时节点,不过带有顺序,客户端会话结束节点就消失。

集群角色

ZooKeeper集群中有一个leader,多个follower角色,其中leader提供服务,follower提供服务。

Leader的选举机制

Leader作为整个ZooKeeper集群的主节点,负责响应所有对ZooKeeper状态变更的请求。

Leader选举:集群初始化阶段,一台服务器server是完成选举的,两台之间能够互相通信,每台机器试图找到一个Leader。由此进入选举机制。

投票基于Sid(服务器id)ZXid(事务id)优先查找ZXid,以数据最新的作为Leader。如果ZXid一样大,就比较Sid,这里有个过半的概念,大于集群机器数量的一半,即大于或等于(n/2+1)

zookeeper监听机制

  • 当客户端关注的节点发生变化(数据改变、节点删除、子目录节点增加删除),zk会通知客户端,监听机制保证zk保存的任何的数据的任何改变都能快速的响应到监听了该节点的应用程序

总结

  • Znode系统,存储一些关键数据,类似于unix文件系统
  • watch监听机制,可以让客户端有能力实时感知zookeeper代为保管的数据的变化,从而进行相应处理。

那么kafka为什么依赖zookeeper呢?

ZooKeeper 作为给分布式系统提供协调服务的工具被 kafka 所依赖。在分布式系统中,消费者需要知道有哪些生产者是可用的,而如果每次消费者都需要和生产者建立连接并测试是否成功连接,那效率也太低了,显然是不可取的。而通过使用 ZooKeeper 协调服务,Kafka 就能将 Producer,Consumer,Broker 等结合在一起,同时借助 ZooKeeper,Kafka 就能够将所有组件在无状态的条件下建立起生产者和消费者的订阅关系,实现负载均衡 

1.Brork管理

在Kafka的设计中,选择了使用Zookeeper来进行所有Broker的管理,体现在zookeeper上会有一个专门用来进行Broker服务器列表记录的点,节点路径为/brokers/ids

Zookeeper用一个专门节点保存Broker服务列表,也就是 /brokers/ids

broker启动时,向Zookeeper发送注册请求,Zookeeper会在/brokers/ids下创建这个broker节点,如/brokers/ids/[0...N],并保存brokerIP地址和端口,Broker 创建的是临时节点,在连接断开时节点就会自动删除,所以在 ZooKeeper 上就可以通过 Broker 中节点的变化来得到 Broker 的可用性。

 2、负载均衡

brokerZookeeper进行注册后,生产者根据broker节点来感知broker服务列表变化,这样可以实现动态负载均衡。

3、Topic 信息

在 Kafka 中可以定义很多个 Topic,每个 Topic 又被分为很多个 Partition。一般情况下,每个 Partition 独立在存在一个 Broker 上,所有的这些 Topic 和 Broker 的对应关系都由 ZooKeeper 进行维护。

4、Controller 选举


http://chatgpt.dhexx.cn/article/m2dxTnkp.shtml

相关文章

Kafka能干什么,为什么如此受欢迎?

一、Kafka是什么? Kafka是最初由Linkedin公司开发的一个分布式、分区的、多副本的、多订阅者,由Scala和Java编写的基于zookeeper协调的分布式流处理平台,常见可以用于web日志、访问日志,消息服务等等,Linkedin于2010年将其贡献给了…

Kafka集群部署

文章目录 一、Kafka集群部署二、启动Kafka集群 Kafka是一个高吞吐量、基于ZooKeeper(ZooKeeper维护Kafka的broker信息)的分布式发布订阅信息系统,它可以处理消费者在网站中的所有动作(网页浏览,搜索和其他用户的行动&a…

kafka

Kafka是什么 Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。 Kafka最初是由LinkedIn开发,并于2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高通量、低…

Kafka学习之一 Kafka是什么,主要应用在什么场景?

1、kafka是什么? Kafka是由LinkedIn开发的一个分布式基于发布/订阅的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用。 2、产生背景 Kafka是一个消息系统,用作LinkedIn的活动流(Activity Stream&#…

kafka究竟是干嘛的?

kafka简介 一、维基百科二、消息队列2.1 什么是消息队列2.2 发布/订阅消息队列 三、kafka 简介 一、维基百科 维基百科kafka简介入口 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。该项目的目标是为处理实时数据提供一个统一、高吞吐、低…

Kafka是什么?为什么拥有异步、削峰、解耦?有哪些角色?

一、Kafka是什么? Kafka是一个分布式消息中间件,支持分区的、多副本的、多订阅者的、基于zookeeper协调的分布式消息系统。 通俗来说: kafka就是一个存储系统,存储的数据形式为“消息”; 它的主要作用类似于蓄水池,…

科普:Kafka是啥?干嘛用的?

来源 | http://r6d.cn/bdjdi Kafka简介 Kafka概述: Kafka由 linked-in 开源 。 kafka-高产出的分布式消息系统(A high-throughput distributed messaging system)。 Kafka是一个高吞吐、分布式、基于发布订阅的消息系统,利用Kafka技术可以在廉价的PC Ser…

Kafka 是什么?

前言 本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系 正文 Kafka 的诞生背景…

kafka是什么?主要用在什么场景

1、kafka是什么? Kafka是由LinkedIn开发的一个分布式基于发布/订阅的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用。2、产生背景 Kafka是一个消息系统,用作LinkedIn的活动流(Activity Stream&#…

kafka是什么?

一、定义 Apache Kafka 是一款开源的消息系统。可以在系统中起到“肖峰填谷”的作用,也可以用于异构、分布式系统中海量数据的异步化处理。 系统包括四个主要API: Producer API 允许一个应用推送流记录通过一个或多个Kafka topics ;Consumer API 允许一个应用订阅一个或多个…

Kafka分区机制介绍与示例

Kafka中可以将Topic从物理上划分成一个或多个分区(Partition),每个分区在物理上对应一个文件夹,以”topicName_partitionIndex”的命名方式命名,该文件夹下存储这个分区的所有消息(.log)和索引文件(.index)&#xff0c…

Kafka介绍

1. Kafka的基本介绍 1.1 什么是Kafka? Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访…

什么是Kafka?

1 kafka 是什么   Apache kafka is a distributed streaming platform,即官方定义 kafka 是一个分布式流式计算平台。而在大部分企业开发人员中,都是把 kafka 当成消息系统使用,即它是一个分布式消息队列,很少会使用 kafka 的流…

Linux 之软连接

1.创建软连接 创建文件及文件夹 创建一个软连接 创建的语法:ln -s是必须的,然后后面跟一个目标文件夹,最后是一个当前目录的软连接名。 删除软连接 错误示范: 正确删除: 删除软连接时,要注意软连接的路…

Linux下如何创建和取消软连接

建立软连接: ln -s /usr/nodejs/bin/npm /usr/local/bin/ ln -s /usr/nodejs/bin/node /usr/local/bin/ 删除软连接: rm -rf /usr/local/bin/node注意:取消软连接最后没有/,rm -rf 软连接。加上/是删除文件夹 可以看到&#xf…

ubuntu 软连接建立

程序报错 /bin/sh: 1: /usr/bin/c: not found/usr/bin 主要放置一些应用软体工具的必备执行档例如c、g、gcc,一些软件的运行脚本,在目录中确实没有看到c,g问题应该出在这里 g -v报错Unable to exec g.real: No such file or directory 解决:…

windows系统下创建软连接

Windows系统创建软连接 为c:\Users\hp\.Pycharm2017.3\system\ 创建index文件软连接,被连接文件为D:\”deep learning”\bak\index

创建软连接和硬链接

前言 硬链接的原理:使链接的两个文件共享同样的文件内容,也就是同样的 inode。 硬链接有一个缺陷:只能创建指向文件的硬链接,不能创建指向目录的硬链接。但软链接可以指向文件或目录。 软链接的原理:就跟我们在windo…

软连接与硬链接

引入 1.硬链接与软连接 Linux 系统中有软链接和硬链接两种特殊的 "文件"2.inode是什么 ⛅要解释清楚两者的区别和联系需要先说清楚 linux 文件系统中的 inode 这个东西 ⛅当划分磁盘分区并格式化的时候,整个分区会被划分为两个部分,即inod…

Linux建立软链接、硬链接

软链接 说明:软链接仅仅包含所链接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行链接。但是,当原始文件被删除后,链接文件也将失效。 1.软链接,以路径的形式存在。类似于Windows操作系统中的快…