arbiter/witness/observer 多 dc 中的 Kafka 领导人选举

Kafka leader election in multi-dc with an arbiter/witness/observer

我想在两个数据中心部署一个 Kafka 集群,每个数据中心的节点数相同。第一个 DC 用于主动模式,第二个 DC 用于被动模式。

例如,假设两个数据中心都有 3 个节点,第一个 DC 上有 2 个同步副本 (ISR),第二个 DC 上有一个 ISR。

是否可以让第三个 DC 包含一个 arbiter/witness/observer 节点,这样在一个 DC 发生故障的情况下,leader 选举可以成功并在一致性方面得到正确的结果? mongoDB 具有名为 Replica set Arbiter.

的功能

在三个数据中心部署 ZooKeeper 怎么样?根据我的理解,ZooKeeper 不保存 Kafka 数据,不应该为 Kafka 主题中的每条新记录联系它,即您不为每条新记录支付第三个 DC 的延迟。

2017 年 Kafka 峰会上有一个演讲 One Data Center is Not Enough: Scaling Apache Kafka Across Multiple Data Centers speaking about this setup. There is also some interesting information inside a Confluent whitepaper Disaster Recovery for Multi-Datacenter Apache Kafka® Deployments。 它说它可以工作,他们称它为观察者节点,但它也说没有人试过这个。

Zookeeper 跟踪 Kafka (0.9.0+) 的以下元数据。

  • 选择控制器 - 控制器是代理之一,负责维护所有分区的 leader/follower 关系。当一个节点关闭时,是控制器通知其他副本成为分区领导者,以取代即将离开的节点上的分区领导者。 Zookeeper 用于选举一个控制器,确保只有一个,如果它崩溃了,选举一个新的。
  • 集群成员资格 - 哪些代理处于活动状态并且是集群的一部分?这也是通过 ZooKeeper 管理的。
  • 主题配置 - 该主题有哪些覆盖,分区位于何处等。
  • Quotas - 允许每个客户端读写多少数据
  • ACL - 允许谁读写哪个主题

关于 Kafka 和 Zookeeper 之间依赖关系的更多细节 Kafka FAQ and answer at Quora from a Kafka commiter working at Confluent

根据我阅读的资源,在第三个具有高延迟的 DC 上具有两个 DC(Kafka 和 Zookeeper)和一个 arbiter/witness/observer Zookeeper 节点的设置可以工作,但我没有找到任何实际试验过的资源。