概要描述
TDH 中的 Kafka 强依赖于 Zookeeper,Zookeeper 为 Kafka 提供集群的管理,不仅保存着集群的 Broker、Topic、Partition 等元数据,还负责 Broker 故障发现、Leader 选举、负载均衡等。
在一些场景中,我们可能会需要在同一套集群中安装两套kafka集群来满足数据传输需求。正常情况下,一个集群会部署至少一个 Zookeeper 来管理协调各个组件运行。如果我们要在同一集群安装两套 Kafka,可以选择依赖同一个 Zookeeper,也可以分开依赖不同的 Zookeeper,下文就两种方式分别做以说明。
详细说明
- 两个 kafka 分别使用不同的 zookeeper(推荐)
- 两个 kafka 使用同一个 zookeeper
两个 kafka 分别使用不同的 zookeeper(推荐)
这种部署方式相对简单点,也是推荐的方式,即两个 kafka 可以分别依赖对应的 Zookeeper ,这样可以避免Zookeeper 中元数据冲突的问题,也可以省去修改 Zookeeper 数据存储路径的步骤,也不会存在 Manager 页面上组件状态显示异常的问题。
需要注意的是:
如果集群节点较少,新装的 Zookeeper 和 Kafka 和之前的 Zookeeper/Kafka 在相同的节点上,需要注意端口冲突问题,首先,manager页面上需要修改服务的端口配置,除此之外,每个新装 Kafka 节点的 server.properties 中的 zookeeper.connect,也需要手动修改添加端口,如:
新装 Zookeeper2 端口为2182,需要将新装 Kafka2 的server.properties 中的 zookeeper.connect修改为:
zookeeper.connect=xl-tdh622a:2182,xl-tdh622b:2182,xl-tdh622c:2182
否则会导致新装的 Kafka 默认注册元数据到原来的Zookeeper1 中,造成元数据冲突,如 brokerid 重复等情况,导致服务无法正常启动等问题。
kafka 的 brokerid 是获取的 nodeId,如果 kafka 装在相同的节点上,肯定会出现 broekrid 相同的情况,需要避免。
两个 kafka 使用同一个 zookeeper
Kafka 在 Zookeeper 上注册的元数据信息不会以服务名分开,默认都在 Zookeeper 上的根目录下面,Kafka 在 Zookeeper 上的存储结构如图:

如果在只有一个 Zookeeper 的情况下,安装两个 Kafka ,那么就需要将两个 Kafka 在 zk 上的数据分开存储,例如变成 kafka1\kafka2 目录下。
Kafka 组件本身可以决定在 zk 上写的路径。在 server.properties 中也有备注说明的:
# You can also append an optional chroot string to the urls to specify the
# root directory for all kafka znodes.

我们需要手动修改 server.properties (所有kafka节点的 /etc/kafka1/conf 目录下)里面的 zookeeper.connect 参数,在后面追加目录。例如:
将 Kafka1 的参数改成 localhost:2181/kafka1;
将 Kafka2 的参数改成 localhost:2181/kafka2。
如图所示:

需要注意的是:
这个参数在 manager 上并没有暴露,只能手动在每个节点的 server.properties 中修改,所以一旦 Kafka 配置服务后,修改的参数就会被覆盖。
PS:可以通过直接修改模板解决,模板在 manager 节点下的 /var/lib/transwarp-manager/master/content/meta/services/KAFKA/版本号/templates/server.properties.ftl****
此操作可能会引发的问题是:
manager 界面可能会显示角色为黄色,不健康。原因是 manager 的健康检查机制是用 zkCli.sh 脚本去访问 /brokers/ids ,修改后路径发生变化,健康检查访问不到,所以组件状态显示会有问题。不过不影响 Kafka 的功能使用。
可以通过修改 metainfo.yaml 模板删除这部分健康检查解决,注意此操作为非标操作,不建议,参考如下:
在 manager 节点下,修改 /var/lib/transwarp-manager/master/content/meta/services/KAFKA/版本号/metainfo.yaml 模板文件,删除其中的 – category: VITAL_SIGN_CHECK ,如图框选部分:

修改完后,需要保存并重启 manager 服务,然后页面上配置服务并重启 Kafka 组件生效。