仅使用两台服务器构建 Kafka 集群

Building a Kafka Cluster using two servers only

我打算使用两台服务器构建一个 Kafka 集群,并在这两台服务器上托管 Zookeeper。

问题是,由于 Kafka 需要 Zookeeper 运行,Zookeeper 在两台服务器上实现 Kafka 集群的最佳集群构建是什么?

例如。我目前 运行 在两台服务器上设置两个 zookeeper,在每台服务器上设置一个 Kafka,在 Kafka 配置中,它们指向所有 Zookeeper。

有更好的方法吗?

首先,您不必在同一台服务器上安装 Zookeper 和 Kafka。 Zookeeper 的角色之一是选举控制器。 (负责维护所有分区的 leader/follower 关系的经纪人之一)用于选举;大多数 Zookeper 节点必须处于活动状态。在您的情况下,即使一个 Zookeeper 实例已关闭,您也无法 select 控制器。所以拥有一个或两个 Zookeper 之间没有区别。这就是为什么建议在 Zookeeper 集群中至少有 3 个节点。这样就可以处理一个Zookeeper节点的故障。

除此之外,强烈建议您的 Kafka 集群中至少有三个代理,以保持一致性和高可用性。 (link1, )

更新:

只要您仅限于两台服务器,那么您可以考虑通过设置 min.insync.replicas=2 和具有 replication.factor=2 的主题来设置代理来牺牲高可用性。如果 HA 比数据丢失更重要,那么您可以再次使用 min.insync.replicas=1(默认)代理配置和主题 replication.factor=2。在这种情况下,您的选择是恕我直言。 (一两个 Zookeeper 并不重要,正如我上面所说)