apache-kafka之在 Kafka 集群中添加新的 ZooKeeper 节点

阿里 阅读:184 2025-05-04 20:05:19 评论:0

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

在 zookeeper.properties 文件中:

server.1=zNode01:2888:3888 
server.2=zNode02:2888:3888 
server.3=zNode03:2888:3888 

在 server.properties 文件中:
zookeeper.connect=zNode01:2181,zNode02:2181,zNode03:2181 

我想添加一个新的 ZooKeeper 节点:
  • 我需要将这个新的 ZooKeeper IP 添加到现有的 ZooKeeper 属性文件中并需要重新启动它,或者有另一种方法可以做到吗?
  • 我需要将这个新的 ZooKeeper IP 添加到 Kafka server.properties 文件并需要重新启动它或者有另一种方法可以做到吗?
  • 请您参考如下方法:

    它比@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集群动态添加新节点的工作原理。


    标签:zookeeper
    声明

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    关注我们

    一个IT知识分享的公众号