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

时间:2018-08-25 14:00:26

标签: 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

并在server.properties文件中:

zookeeper.connect=zNode01:2181,zNode02:2181,zNode03:2181

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

  1. 我需要将此新的ZooKeeper IP添加到现有的ZooKeeper属性文件中,需要重新启动它,还是有另一种方法?

  2. 我需要将此新的ZooKeeper IP添加到Kafka server.properties文件并需要重新启动它,还是有另一种方法?

2 个答案:

答案 0 :(得分:1)

它比@ cricket_007所描述的更加复杂。在您尝试将新成员添加到现有的Zookeeper集群之前,这将是一本好书。

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

重点关注“修改当前动态配置” 部分。

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

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

b)请注意,木匠能够与集群的负责人交谈并不能使其自动成为集群的一部分。动物园管理员集合必须投票并决定将新节点添加到群集中。联接程序的状态当前是一个无投票权的关注者,如果您查看Zookeeper集成的当前配置(通过zkcli的“ config”命令),您将看不到该集成中列出的新节点。

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

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

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

希望答案有助于理解如何向Zookeeper集群动态添加新节点。

答案 1 :(得分:0)

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

使用属性文件中定义的所有服务器添加新节点。他们应该参加。

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

Kafka不需要添加额外的属性,除非您预计在任何给定时间将损失一个以上的ZK