标签搜索

zookeeper安装

mrui
2025-11-25 / 0 评论 / 2 阅读 / 正在检测是否收录...

ZooKeeper 是一个分布式协调服务,常用于管理配置、命名和同步服务。

长期以来,Kafka 使用 ZooKeeper 负责管理集群元数据、控制器选举和消费者组协调等任务理,包括主题、分区信息、ACL(访问控制列表)等。

ZooKeeper 为 Kafka 提供了选主(leader election)、集群成员管理等核心功能,为 Kafka提供了一个可靠的分布式协调服务,使得 Kafka能够在多个节点之间进行有效的通信和管理。

然而,随着 Kafka的发展,其对 ZooKeeper的依赖逐渐显露出一些问题,这些问题也是下面 Kafka去除 Zookeeper的原因。

kafka 2.8+ 为什么要移除zookeeper组件呢?

kafka 4.0+版本彻底移除了zookeeper组件

1.复杂性增加

ZooKeeper 是独立于 Kafka 的外部组件,需要单独部署和维护,因此,使用 ZooKeeper 使得 Kafka的运维复杂度大幅提升。

运维团队必须同时管理两个分布式系统(Kafka和 ZooKeeper),这不仅增加了管理成本,也要求运维人员具备更高的技术能力。

2. 性能瓶颈

作为一个协调服务,ZooKeeper 并非专门为高负载场景设计, 因此,随着集群规模扩大,ZooKeeper在处理元数据时的性能问题日益突出。

例如,当分区数量增加时,ZooKeeper需要存储更多的信息,这导致了监听延迟增加,从而影响Kafka的整体性能。

在高负载情况下,ZooKeeper可能成为系统的瓶颈,限制了Kafka的扩展能力。

3. 一致性问题

Kafka 内部的分布式一致性模型与 ZooKeeper 的一致性模型有所不同。由于 ZooKeeper和 Kafka控制器之间的数据同步机制不够高效,可能导致状态不一致,特别是在处理集群扩展或不可用情景时,这种不一致性会影响消息传递的可靠性和系统稳定性。

4.发展自己的生态

Kafka 抛弃 ZooKeeper,最核心的原因:Kafka生态强大了,需要自立门户,这样就不会被别人卡脖子。

纵观国内外,有很多这样鲜活的例子,当自己弱小时,会先选择使用别家的产品,当自己羽翼丰满时,再选择自建完善自己的生态圈。

但是一些旧版的kafka仍需配置ZooKeeper服务,因为Kafka依赖ZooKeeper进行集群协调、Broker注册、Topic管理等操作。

安装ZooKeeper

Java环境

ZooKeeper是基于Java开发的,因此在部署时需要确保机器上有Java运行环境(JRE/JDK)。

检查当前 Java 环境

首先确认系统是否已安装 Java,以及版本是否符合要求

java -version
openjdk version "25.0.1" 2025-10-21
OpenJDK Runtime Environment (build 25.0.1+8-Ubuntu-124.04)
OpenJDK 64-Bit Server VM (build 25.0.1+8-Ubuntu-124.04, mixed mode, sharing)

若提示 command not found,说明未安装 Java,需继续安装

java -version
找不到命令 “java”,但可以通过以下软件包安装它:
apt install openjdk-17-jre-headless  # version 17.0.17+10-1~24.04, or
apt install openjdk-21-jre-headless  # version 21.0.9+10-1~24.04
apt install default-jre              # version 2:1.17-75
apt install openjdk-19-jre-headless  # version 19.0.2+7-4
apt install openjdk-20-jre-headless  # version 20.0.2+9-1
apt install openjdk-22-jre-headless  # version 22~22ea-1
apt install openjdk-11-jre-headless  # version 11.0.29+7-1ubuntu1~24.04
apt install openjdk-25-jre-headless  # version 25.0.1+8-1~24.04
apt install openjdk-8-jre-headless   # version 8u472-ga-1~24.04
root@zookeeper1:~/zookeeper# apt install openjdk-11-jre-headless
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成                 
将会同时安装下列软件:
  alsa-topology-conf alsa-ucm-conf ca-certificates-java java-common libasound2-data libasound2t64
建议安装:
  default-jre alsa-utils libasound2-plugins libnss-mdns fonts-dejavu-extra fonts-ipafont-gothic
  fonts-ipafont-mincho fonts-wqy-microhei | fonts-wqy-zenhei fonts-indic
下载并解压ZooKeeper

点击 ZooKeeper下载列表 ,下载最新版本的安装包。

wget -O   zookeeper-3.9.4-bin.tar.gz https://dlcdn.apache.org/zookeeper/zookeeper-3.9.4/apache-zookeeper-3.9.4-bin.tar.gz
tar -xf zookeeper-3.9.4-bin.tar.gz
mv apache-zookeeper-3.9.4-bin/ /opt/zookeeper

注意:

集群模式至少需要三台服务器,强烈建议拥有奇数台服务器。如果你只有两台服务器,那么如果其中一台故障,机器数量不足以形成多数法定人数。两台服务器本质上比单台服务器稳定性差,因为存在两个单点故障。

配置

所有的服务器都拥有相同的配置文件。在ZooKeeper目录下的conf目录中,有个配置文件的示例,拷贝这个文件并修改其中的部分内容

cp conf/zoo_sample.cfg conf/zoo.cfg

修改项:

tickTime=2000  
initLimit=10
syncLimit=5
dataDir=/var/zookeeper/data
dataLogDir=/var/zookeeper/logs
clientPort=2181
server.1=192.168.88.31:2888:3888
server.2=192.168.88.32:2888:3888
server.3=192.168.88.33:2888:3888

说明:

  • tickTime:ZooKeeper 使用的基本时间单位(毫秒)。它用于读取心跳,最小会话超时时间是tickTime的两倍。
  • initLimit:用来限制法定人数服务器连接领导者所需时间的超时
  • syncLimit:限制服务器与领导者的过时距离
  • dataDir:存储内存数据库快照的位置,除非另有说明,存储数据库更新的事务日志。
  • dataLogDir:存储日志文件的位置
  • clientPort:用于监听客户端连接的端口
  • server.1=192.168.88.31:2888:3888 集群地址,“2888”和“3888”。对等节点使用前一个端口连接其他节点。这种连接是必要的,以便对等端能够通信,例如达成更新顺序的一致。更具体地说,ZooKeeper服务器利用该端口将追随者连接到领导者。当出现新的领导者时,跟随者会通过该端口与该领导者开启TCP连接。由于默认领导人选举也使用TCP,我们目前要求领导人选举需要另一个端口。这是服务器条目的第二个端口。

确保dataDir和dataLogDir目录存在,如果不存在就创建它们。

配置myid

在data/目录下,按集群顺序依次创建myid文件并写入id信息。

#88.31机器上
 echo 1 >myid
 #88.32机器上
 echo 2 >myid
 #88.33机器上
 echo 3 >myid
开启服务
bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /root/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
root@zookeeper2:~/zookeeper# bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /root/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
配置开机启动(service服务)
vim /etc/systemd/system/zookeeper.service

[Unit]
Description=Apache ZooKeeper Service
Documentation=https://zookeeper.apache.org
After=network.target

[Service]
Type=forking
ExecStart=/root/zookeeper/bin/zkServer.sh start
ExecStop=/root/zookeeper/bin/zkServer.sh stop
ExecReload=/root/zookeeper/bin/zkServer.sh restart
Restart=on-failure

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable zookeeper --now
0

评论 (0)

取消