具有多个Zookeeper配置的kafka

时间:2018-08-21 01:34:19

标签: apache-kafka apache-zookeeper

对集群设置有些困惑:

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

  2. 对于Kafka,在server.properties文件中,是否必须为参数zookeeper.connect指定zookeeper服务器的完整列表,还是仅1个就足够了?有什么区别吗? 我看到了即使在创建主题时也要指定Zookeeper服务器完整列表的做法,例如/opt/kafka/bin/kafka-topics.sh --create --zookeeper xxxx:2181,xxxx:2181,xxxx:2181-复制因子1-分区1 --topic sample_test

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

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

  2. 运行uReplicator将生产中的数据复制到灾难恢复;从uReplicator示例中,似乎配置如下:kafka1(生产中)连接到“ zookeeper1:2181 / cluster1”,而kafka2(生产中)连接到“ zookeeper1:2181 / cluster2”,“ /”的含义是什么cluster1“,” / cluster2“?在这种情况下正确的配置是什么,将DR中的kafka2连接到prod中的zookeeper1的想法是什么?

2 个答案:

答案 0 :(得分:0)

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

  • 仅指定一个Zookeeper服务器:端口通常就足够了,但是在生产实例/属性中,您总是要配置所有它们。如果其中一台服务器已关闭,但群集仍在运行(例如,三台Zookeeper服务器中有两台已启动),Kafka将尝试配置中的下一个服务器,直到找到可以与之对话的服务器为止。但是,如果您选择放入的唯一一个恰好在该确切时间发生故障,则服务器将根本无法与Zookeeper进行通信。最好始终在配置中包括整个Zookeeper服务器列表。

答案 1 :(得分:0)

  

是否必须为参数zookeeper.connect指定Zookeeper服务器的完整列表

优良作法是至少放置3或5。如果仅放置1或5,然后落下,Kafka可能无法按预期工作或失败。

  

在灾难恢复中,将这两个动物园管理员组成一个集群

通常不建议在Kafka群集之间共享Zookeepers群集,因为Kafka对大量Kafka群集的Zookeeper施加了合理的负载。

尽管如此,您指出

  

连接到“ zookeeper1:2181 / cluster1”,并且kafka2(在DR中)连接到“ zookeeper1:2181 / cluster2”,“ / cluster1”,“ / cluster2”是什么意思?

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

  

将DR中的kafka2连接到产品中的zookeeper1的想法是什么?

嗯,你不会。如果Kafka2拥有自己的唯一主题数据,并且没有复制到Kafka1上,则指向指出这些主题存在于Kafka2上的Zookeeper数据,但没有Kafka1只会导致混乱和错误。


此外,我不知道uReplicator除MirrorMaker以外的工作方式,但您还想为Zookeeper(不仅是Kafka)准备一个灾难恢复策略