Apache kafka 卡夫卡集群能被一分为二吗?

Apache kafka 卡夫卡集群能被一分为二吗?,apache-kafka,apache-zookeeper,Apache Kafka,Apache Zookeeper,场景:您在不同的DC中有一个Kafka群集,但它们被配置为一个群集。所以没有通过镜子制造者或类似帽子的东西进行镜像。DCs与eatch相距不远。但是他们在物理上是分开的 现在,如果两个DCs之间的连接断开,您需要做什么来确保集群在两侧都是故障安全的?因此,生产者和消费者双方都应该继续发挥作用 我猜:两边都需要多个动物园管理员和多个卡夫卡节点 但这足够了吗?群集在重新连接后是否自行恢复 提前感谢。我假设您的数据中心“离eatch other不远”,基本上是可用区(AZ) 将集群分布在多个AZ上是很

场景:您在不同的DC中有一个Kafka群集,但它们被配置为一个群集。所以没有通过镜子制造者或类似帽子的东西进行镜像。DCs与eatch相距不远。但是他们在物理上是分开的

现在,如果两个DCs之间的连接断开,您需要做什么来确保集群在两侧都是故障安全的?因此,生产者和消费者双方都应该继续发挥作用

我猜:两边都需要多个动物园管理员和多个卡夫卡节点

但这足够了吗?群集在重新连接后是否自行恢复


提前感谢。

我假设您的数据中心“离eatch other不远”,基本上是可用区(AZ)

将集群分布在多个AZ上是很常见的。然而,通常不希望或不可能每个“切片”都独立存在

最直接的问题是Zookeeper,它通过设计防止大脑分裂。因此,如果一个ZK集群被拆分,那么只有一个“切片”(最多)将继续工作。因此,位于非工作ZK集群一侧的代理将不起作用

那么让我们假设双方都能继续工作。当你再次加入双方时会发生什么

当客户分别向每一方写入数据时,数据可能会出现分歧。现在,您可以在同一个分区中为相同的偏移量使用不同的消息,并且无法解决冲突,因为这两个选项都是“有效的”

我希望这能说明为什么这不是一个可行的解决办法。在实践中,如果AZ离线,它在恢复在线之前是不起作用的

连接到脱机AZ的客户端应重新连接到其他AZ(使用多个引导服务器),出现故障的AZ中的客户端应重新配置到另一个AZ中


如果配置正确,Kafka可以经受住AZ停机(即使在实践中,最好有3个AZ),并保持所有资源可用。同样在这种情况下,当出现故障的AZ返回时,集群将自动恢复到良好状态。

我假设“离eatch other不远”的数据中心基本上是可用区(AZ)

将集群分布在多个AZ上是很常见的。然而,通常不希望或不可能每个“切片”都独立存在

最直接的问题是Zookeeper,它通过设计防止大脑分裂。因此,如果一个ZK集群被拆分,那么只有一个“切片”(最多)将继续工作。因此,位于非工作ZK集群一侧的代理将不起作用

那么让我们假设双方都能继续工作。当你再次加入双方时会发生什么

当客户分别向每一方写入数据时,数据可能会出现分歧。现在,您可以在同一个分区中为相同的偏移量使用不同的消息,并且无法解决冲突,因为这两个选项都是“有效的”

我希望这能说明为什么这不是一个可行的解决办法。在实践中,如果AZ离线,它在恢复在线之前是不起作用的

连接到脱机AZ的客户端应重新连接到其他AZ(使用多个引导服务器),出现故障的AZ中的客户端应重新配置到另一个AZ中


如果配置正确,Kafka可以经受住AZ停机(即使在实践中,最好有3个AZ),并保持所有资源可用。同样在这种情况下,当失败的AZ返回时,集群将自动返回到良好状态。

对于信息(帮助澄清讨论),这称为“拉伸集群”。对于信息(帮助澄清讨论),这称为“拉伸集群”。我理解。谢谢你的回复。然后,imho的解决方案是建立多个集群,从一个主题到另一个主题决定它们必须在哪里保持可用,并将大多数Zookeeper实例放入该AZ。我理解。谢谢你的回复。然后,imho的解决方案是建立多个集群,从一个主题到另一个主题决定它们必须在哪里保持可用,并将大多数Zookeeper实例放到该集群中。