Kafka集群能被切成两半吗?

zour9fqk  于 2021-06-06  发布在  Kafka
关注(0)|答案(1)|浏览(207)

场景:在不同的dcs中有一个kafka集群,但它们被配置为一个集群。因此,没有通过mirrormaker或类似帽子的东西进行镜像。分散控制系统离彼此不远。但他们是分开的。
现在,如果这两个dcs之间的连接断开,您必须做些什么来确保集群在两侧都是故障保护的?因此,在这两方面,生产者和消费者仍应发挥作用。
我猜:两边需要多个缩放器和多个Kafka节点。
但这就够了吗?重新连接后群集是否自行恢复?
提前谢谢。

t3irkdon

t3irkdon1#

我假设您的数据中心“离eatch其他的不远”基本上是可用性区域(AZ)。
将一个簇分布在多个az上是很常见的。然而,通常不希望或不可能每个“切片”都能独立存在。
眼前的问题是zookeeper,它通过设计防止了大脑分裂的情况。因此,如果一个zk集群被拆分,那么只有一个“切片”(最多)可以继续工作。因此,站在不工作的zk集群一边的代理将是不起作用的。
假设双方都能继续合作。当你再次加入双方时会发生什么?
当客户端分别向每一方写入数据时,数据很可能会出现分歧。现在,您可能有相同的分区,不同的消息具有相同的偏移量,并且无法解决冲突,因为这两个选项都是“有效的”。
我希望这能说明为什么这不是一个可行的解决办法。实际上,如果一个az离线,它在恢复在线之前是不起作用的。
连接到脱机az的客户端应重新连接到其他az(使用多个引导服务器),并且故障az中的客户端应重新配置到另一个az。
如果配置正确,kafka可以在az中断后生存(即使在实践中,最好有3个az)并保持所有资源可用。同样在这种情况下,当失败的az返回时,集群将自动返回到良好状态。

相关问题