kafka集群元数据在zookeeper中的存储分布

我们都知道,自从 Kafka 诞生之际,就一直使用 Zookeeper 服务来进行 kafka 集群的元数据和状态管理,虽然在 KIP-500 中有提议未来将移除 Zookeeper 的依赖,使用 Raft 协议来实现新的元数据和状态管理,但在这之前,我们仍然需要对 kafka 集群的整个元数据和状态有一定理解,才能更好的维护和保障 kafka 集群。

前言

在 kafka 集群中,ZooKeeper 集群用于存放集群元数据成员管理Controller 选举,以及其他一些管理类任务

  • 存放元数据: 是指主题分区的所有数据都保存在 ZooKeeper 中,且以它保存的数据为权威,其他 “人” 都要与它保持对齐。
  • 成员管理: 是指 Broker 节点的注册、注销以及属性变更。
  • Controller 选举: 是指选举集群 Controller,而其他管理类任务包括但不限于主题删除、参数配置。

Zookeeper 服务

在开始之前,我们首先需要对 Zookeeper 服务有一定的了解。在官方文档中,Zookeeper 有如下能力:

  • 配置管理:其实就是单纯的 K/V 存储,可以用来配置的存储和管理,实现对分布式系统组件的集中式的配置管理
  • 命名:命令空间管理,在 zookeeper 中配置可通过不同的根路径来实现简单的命名空间隔离 (简单的 chroot 隔离)
  • 分布式的同步服务:可保证分布式的同步
  • 分组服务:可以将一组服务配置进行分组管理,其实在 Dubbo 的注册中心中,就是使用分组和命名来统一进行生产者的注册和发现
Zookeeper架构
Zookeeper 架构

在 Zookeeper 中所有的命名空间和文件系统比较类似,每个节点都有一个唯一的路径,如下图:

zookeeper内部存储结构
zookeeper 内部存储结构

为什么 Zookeeper 服务可以满足配置管理和协调服务呢?主要是因为它的节点属性,通常也是经常可能会忽略的问题,即在 Zookeeper 中存在两种节点: 持久节点临时节点,节点也称之为 znode,而 znode 本身除了数据之外,还会存储一些额外的信息:

  • 数据变更的版本号
  • ACL 变更的版本号
  • 时间戳

每次 znode 中的数据有变更,版本号都会递增,并且 client 在向 znode 获取数据时,不仅会获取实际数据,而且会获取到数据的版本,这在整个配置管理领域会相当有用。

前面说到的持久节点只要 znode 创建后,便一直会存在,这种节点主要用于配置的持久化存储,只要 zookeeper 集群整体可用,那该节点也一直可用 (及时集群异常后恢复,该节点依旧存在);而临时节点 随着某个创建 znode 的会话的开始,被创建,而一旦这个会话被撤除掉,这个 znode 就会自动被 ZooKeeper 删除。

对于临时节点来讲,经常会被用在如下场景:

  • dubbo 中的服务注册
  • 其他分布式服务中的 leader 选举

而真正使得 Zookeeper 在 Java 语言生态中有如此大影响还依赖于另外一个功能: watches,Client 可以对某个 znode 设置 watch 当这个 znode 有变更的时候,就会产生 watch 事件,这个事件会由 ZooKeeper 通知至 Client, 即是 Client 会收到来自 Server 的通知,可以实现数据的动态变更。(之所以说是 Java 语言生态,是因为在云原生领域,Etcd 几乎是 Zookeeper 的替代品,不同的是它是 Golang 语言生态体系中的)

kafka 集群数据在 zookeeper 的存储

前面对 Zookeeper 服务进行了大概的说明,接下来我们一起看看 kafka 的集群数据在 zookeeper 中是如何存储和分布的。<

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ZookeeperKafka集群搭建是一种常用的架构设计方法。Zookeeper是一种分布式的协调服务,在Kafka集群搭建主要用于存储元数据信息和管理集群的状态。而Kafka则是一种高吞吐量的消息队列系统,可实现大规模的数据传输和处理。通过ZookeeperKafka集群搭建,可以提高系统的可靠性和可扩展性。 ### 回答2: ZookeeperKafka是Apache软件基金会下的两个重要的分布式应用程序,它们都是构建可靠、可扩展、具有高性能的分布式应用体系结构的两个重要组件。下面将介绍如何搭建一个Kafka集群,并使用Zookeeper来实现其高可用性。 1. 准备工作 为了搭建Kafka集群,您需要在您的每个服务器上安装Java环境。建议将Java安装在/opt/java/目录下,并将JAVA_HOME变量设置为/opt/java/jdk1.8.0_301。 2. 下载和安装Zookeeper 首先,您需要从Zookeeper的官方网站上下载最新版本的Zookeeper。选择合适版本的二进制文件下载即可。完成后,将Zookeeper解压到/opt/zookeeper/目录下。编辑/opt/zookeeper/conf/zoo.cfg,设置数据目录和Zookeeper服务器列表,例如:dataDir=/opt/zookeeper/data server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888 3. 配置Kafka集群Kafka的二进制文件下载到您的服务器,解压到/opt/kafka目录下。编辑/opt/kafka/config/server.properties文件,将以下参数设置为适当的值: broker.id=1 listeners=PLAINTEXT://kafka1:9092 advertised.listeners=PLAINTEXT://kafka1:9092 log.dirs=/opt/kafka/logs num.partitions=3 其broker.id是唯一的标识符,listeners和advertised.listeners指定Kafka服务器的地址,log.dirs指定存储Kafka数据的目录,num.partitions指定在Kafka服务器上创建的分区数。 4. 启动ZookeeperKafkaZookeeper服务器上启动Zookeeper:/opt/zookeeper/bin/zkServer.sh start 在Kafka服务器上启动Kafka:/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties 如果Kafka服务器和Zookeeper服务器在同一台服务器上运行,则必须在不同的终端启动它们。根据需要,将Kafka服务器配置文件的其他参数设置为适当的值。 5. 测试Kafka集群 通过创建新的主题并发送一些消息进行测试。在另一个终端,创建一个名为test的新主题:/opt/kafka/bin/kafka-topics.sh --create --zookeeper zk1:2181 --replication-factor 2 --partitions 3 --topic test 在同一终端,发送一些消息:/opt/kafka/bin/kafka-console-producer.sh --broker-list kafka1:9092 --topic test 在另一个终端,接收这些消息:/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server kafka1:9092 --topic test --from-beginning 以上是一个简单的Kafka集群搭建过程,由Zookeeper来管理Kafka集群的状态。当Kafka集群的任何一个服务器发生故障时,Zookeeper将自动将客户端重定向到另一个可用服务器。通过ZookeeperKafka的结合,您可以构建高可用、高性能的分布式应用程序。 ### 回答3: Kafka是一种高效、可扩展的分布式消息系统,而Zookeeper则是Kafka集群的重要组成部分。通过ZookeeperKafka集群可以实现高可用性和自动化管理。 以下是Zookeeper Kafka集群搭建的步骤: 第一步:安装Zookeeper Zookeeper的安装可以通过下载二进制包进行安装,也可以通过源码进行编译安装。这里我们以二进制包的方式进行安装。 1. 下载Zookeeper二进制包并解压缩。 2. 进入解压后的Zookeeper目录,复制conf文件夹的zoo_sample.cfg,并修改名称为zoo.cfg。 3. 修改zoo.cfg文件的数据和日志路径,并设置为本地有效的路径。例如: tickTime=2000 dataDir=/usr/local/zookeeper/data dataLogDir=/usr/local/zookeeper/logs 4. 启动Zookeeper: ./bin/zkServer.sh start 第二步:安装Kafka Kafka的安装可以通过下载二进制包进行安装,也可以通过源码进行编译安装。这里我们以二进制包的方式进行安装。 1. 下载Kafka二进制包并解压缩。 2. 进入解压后的Kafka目录,修改config/server.properties文件,设置broker.id、listeners、log.dirs以及zookeeper.connect等属性。 broker.id=1 listeners=PLAINTEXT://hostname:9092 log.dirs=/usr/local/kafka/logs zookeeper.connect=hostname:2181 3. 启动Kafka: ./bin/kafka-server-start.sh config/server.properties 第三步:创建Kafka主题 在Kafka上,消息以主题的形式进行组织。要创建一个主题,可以使用以下命令: ./bin/kafka-topics.sh --create --zookeeper hostname:2181 --replication-factor 1 --partitions 1 --topic test 其,replication-factor表示复制因子,partitions表示分区数,topic表示主题名称。 第四步:启动Kafka生产者和消费者 通过Kafka生产者,可以往指定主题发送消息,而通过Kafka消费者,可以从指定主题接收消息。 启动Kafka生产者: ./bin/kafka-console-producer.sh --broker-list hostname:9092 --topic test 启动Kafka消费者: ./bin/kafka-console-consumer.sh --bootstrap-server hostname:9092 --topic test --from-beginning 以上就是Zookeeper Kafka集群搭建的步骤。通过以上步骤,可以快速搭建一个高效、可扩展的Kafka集群,满足您的消息传输需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值