在 Kafka 集群中添加新的 ZooKeeper 节点?

Pra*_*hal 5 apache-kafka apache-zookeeper

我运行了一个由五个节点组成的 Apache Kafka 集群,我正在使用一个由三个节点组成的 Apache ZooKeeper 集群。

在 zookeeper.properties 文件中:

server.1=zNode01:2888:3888
server.2=zNode02:2888:3888
server.3=zNode03:2888:3888
Run Code Online (Sandbox Code Playgroud)

在 server.properties 文件中:

zookeeper.connect=zNode01:2181,zNode02:2181,zNode03:2181
Run Code Online (Sandbox Code Playgroud)

我想添加一个新的 ZooKeeper 节点:

  1. 我需要将这个新的 ZooKeeper IP 添加到现有的 ZooKeeper 属性文件中并需要重新启动它,或者有另一种方法可以做到吗?

  2. 我需要将这个新的 ZooKeeper IP 添加到 Kafka server.properties 文件并需要重新启动它或者有另一种方法可以做到吗?

nsu*_*eja 6

它比@cricket_007 描述的更复杂。在您尝试将新成员添加到现有 zookeeper 集群之前,这将是一个很好的阅读。

https://zookeeper.apache.org/doc/r3.5.3-beta/zookeeperReconfig.html

特别关注“修改当前动态配置”部分。

基本上,这些是高级步骤:

a) 必须将新服务器介绍给领导者。这是通过在 zookeeper.properties 文件中添加自身和“足够的集群信息”来完成的,以便加入者连接到现有的领导者。配置不需要绝对最新,但足够新鲜以与当前领导者联系。为此,您只需从集群中的节点之一获取 zookeeper.properties 文件,将加入者信息附加到其中,然后在加入者节点上启动 zookeeper 服务器。

b) 请注意,加入者能够与集群的领导者交谈并不会使其自动成为集群的一部分。zookeeper 集合必须投票并决定将新节点添加到集群中。加入者的状态目前是无投票权的追随者,如果您查看zookeeper ensemble的当前配置(通过zkcli的“config”命令),您将看不到ensemble中列出的新节点。

c) 现在,我们使用 zkcli 的“reconfig”命令将新节点作为投票参与者或观察者添加到集群中。投票参与者意味着所有的共识决定(例如,谁是新领导者,是否提交写入等)都将涉及所有投票参与者(而不是观察者)。添加观察者主要是为了增加 Zookeeper 整体的读取吞吐量,而不会增加将它们纳入每个写入操作的两阶段提交的额外开销。reconfig 命令还执行此两阶段提交,其中领导者从所有投票参与者那里收集是否应将新节点添加到集群的投票。如果现有参与者的法定人数同意,则将新节点添加到集群中。

d) 现在,执行 zkcli 的 config 命令将显示新节点作为集群的一部分,作为投票参与者或观察者。

e) 最后,您需要更新 kafka 的 server.properties 文件以关闭循环。即使可能不需要立即进行此更改,这也会通知 kafka 服务器(它是 Zookeeper 客户端)zookeeper 集群中新成员的可用性,以便它可以在故障情况下回退到新添加的节点。

希望答案有助于理解向zookeeper集群动态添加新节点的工作原理。


cri*_*007 0

注意:我自己没有尝试过扩展 ZK 集群,但我会尝试

添加新节点以及属性文件中定义的所有服务器。他们应该加入得很好。

然后将两台新服务器添加到其他 ZK 中,并对其执行滚动重启。

Kafka 不需要添加额外的属性,除非您预计在任何给定时间都会丢失多个 ZK