我们正在尝试使用 kafka 集群实现 Kafka HA。在做研发的时候,我们发现推荐给 zookeeper 和 kafka broker 的最小节点数是 3。
我们理解为什么 zookeeper 应该至少有 3 个节点,因为对于领导者选举,最少 (n+1)/2 个节点应该启动并运行。
但不清楚,为什么至少需要 3 个 kafka 经纪人。为什么我们不能用 2 个 kafka 代理和 3 个 zookeeper 节点来实现 HA?
我们正在尝试使用 kafka 集群实现 Kafka HA。在做研发的时候,我们发现推荐给 zookeeper 和 kafka broker 的最小节点数是 3。
我们理解为什么 zookeeper 应该至少有 3 个节点,因为对于领导者选举,最少 (n+1)/2 个节点应该启动并运行。
但不清楚,为什么至少需要 3 个 kafka 经纪人。为什么我们不能用 2 个 kafka 代理和 3 个 zookeeper 节点来实现 HA?
由于 quorum 属性,Zookeeper 的最小节点数为 3。它应该是奇数,因为没有使用偶数个节点。eg: 8 个节点的 Zookeeper 可以降级到 7 个。Zookeepers 中的很多节点也因为共识算法的原因不好。(例如:Paxos)
对于Kafka集群,我个人认为设置2个broker是可以的。但最好有 3 个经纪人。原因是因为维护 ISR - In Sync Replicas。
假设您的 Kafka 集群有 2 个代理。为了保持数据的高可用性和一致性,我们将副本和 ISR 都设置为 2。有趣的部分是 min-ISR 属性。如果您将 min-ISR 设置为 1,那么领导者将失败,很可能您没有任何剩余的副本。如果将 min-ISR 设置为 2,则当领导者或跟随者失败时,生产者和消费者都无法工作。
如果我们的 Kafka 集群有 3 个代理并且我们将 ISR 设置为 3,则 min-ISR 等于 2。使用此配置,我们接受在工作时丢失 1 个副本(领导者或追随者)的风险。例如,如果我们失去了领导者,至少有一个跟随者同步切换。如果我们失去了一个追随者,我们仍然有剩余的追随者来保持最小 ISR 为 2。
除了@hqt 答案:
您可以设置一个只有 2 个代理的 Kafka HA 集群,但推荐的生产复制因子是3,因此您需要 3 个代理才能实现这一点。
此外,您应该考虑 Confluent 正在将领导选举迁移到 Kafka,因此将来您将不再需要 Zookeeper,这可能意味着拥有奇数个 Kafka 代理。