具有多个动物园管理员配置的kafka

kafka with multiple zookeeper config

对集群设置有点困惑:

  1. Zookeeper 可以通过在文件中配置 myid (1,2,3...) 并将例如 zookeeper1:2888:3888、zookeeper2:2889:3889 设置为集群zoo.cfg 文件

  2. 对于Kafka,在server.properties文件中,参数zookeeper.connect是否必须指定zookeeper服务器的完整列表,还是1就够了?有什么不同吗? 我已经看到即使在创建主题时也指定完整的 zookeeper 服务器列表的做法,例如/opt/kafka/bin/kafka-topics.sh --create --zookeeper x.x.x.x:2181,x.x.x.x:2181,x.x.x.x:2181 --replication-factor 1 --partitions 1 --topic sample_test

---生产和 DR 设置(生产和 dr 之间预计会有较大的延迟)---

  1. 假设,在生产中有 1 个 Kafka (kafka1) 和 1 个 zookeeper 服务器 (zookeeper1),在 DR 中有 1 个 kafka (kafka2) 和 1 个 zookeeper 服务器 (zookeeper2),并将这 2 个 zookeeper 组成集群;

  2. 运行 uReplicator 用于将生产中的数据复制到 DR;从 uReplicator 示例来看,配置似乎是这样的:kafka1(在生产中)正在连接到 "zookeeper1:2181/cluster1",而 kafka2(在 DR 中)正在连接到 "zookeeper1:2181/cluster2",“/cluster1”是什么意思,“ /集群2”?这种情况下的正确配置是什么,DR 中的 kafka2 连接到产品中的 zookeeper1 的想法是什么?

你有两个问题。我会尝试至少解决第一个问题:

  • 通常只指定一个 zookeeper server:port 就足够了,但在生产中 instances/properties,您总是希望配置所有这些。如果其中一台服务器宕机,但集群仍在运行并且 运行(例如,3 台 Zookeeper 服务器中有 2 台已启动),Kafka 将尝试配置中的下一台服务器,直到找到可以对话的服务器到。但是,如果您选择放置的唯一一个恰好在那个时间发生故障,则服务器将根本无法与 Zookeeper 通信。最好始终在配置中包含整个 zookeeper 服务器列表。

is it must to specify the full list of zookeeper server for parameter zookeeper.connect

最好至少放 3 或 5 个。如果你只放一个,然后就挂了,Kafka 可能无法按预期工作,或者失败。

in DR, and form those 2 zookeepers into a cluster

通常不鼓励在 Kafka 集群之间共享 Zookeeper 集群,因为 Kafka 会为大容量 Kafka 集群在 Zookeeper 上施加合理的负载。

不过,正如您所指出的

connecting to "zookeeper1:2181/cluster1", and kafka2 (in DR) is connecting to "zookeeper1:2181/cluster2", what's the meaning of "/cluster1", "/cluster2"?

这在 Zookeeper 中称为 Chroot。可以将其视为 Zookeeper 集群中每个唯一 Kafka 集群的目录或命名空间。

what's the idea of having kafka2 in DR connects to zookeeper1 in prod?

好吧,你不会。如果 Kafka2 有自己独特的主题数据,没有被复制到 Kafka1,那么指向 Zookeeper 数据表明这些主题存在于 Kafka2 而不是 Kafka1 只会导致混淆和错误。


此外,除了 MirrorMaker 之外,我不知道 uReplicator 是如何工作的,但你也想为 Zookeeper 准备一个 DR 策略,而不仅仅是 Kafka