如何从完全失去动物园管理员和重新开始中恢复卡夫卡?

How to recover Kafka from complete zookeeper loss and new start?

我有一个简单的 Kafka 集群,其中包含 3 个代理和 3 个 zk 节点。

如果我清除 2/3 的 zk 节点并将它们带回来(即使是新的 "clean" 节点),随着 zk 重新同步,一切都会恢复。

如果我清除所有 3 个 zk 节点并重新启动它们 "clean"(想想 docker 容器或 AWS 自动缩放组实例),代理会感到困惑。 zk 中的所有数据结构(基本路径、代理、主题等)都没有了,因为我有一个空白的 zk。

我怎样才能从这种情况中恢复过来?我(可能)愿意忍受丢失的主题(因为我们自动创建主题),但是经纪人(与启动不同)不会 "know" zk 是空白的,所以不要重新初始化(设置结构,注册经纪人, ETC。)。相反,我可以备份 zk 并恢复它,只要我知道 backup/restore.

不过,关键要素是完全自动化的。在云原生中,我不能依赖人工进行恢复或检查。

我不确定使用自动缩放来管理 Zookeeper 节点(或 Kafka 代理)是否是个好主意。

对于一个 Zookeeper 维护主题信息(如果您没有使用最新的 Kafka 构建或者仍在使用 old 消费者 API 它也会维护消费者偏移量)。

除此之外,主题分区是静态分配给代理的,因此如果您关闭当前的 Kafka 代理并生成新节点,您必须非常小心,并使用相同的 broker.id 和数据启动代理,否则Kafka 可能会感到困惑。

第三,关于 Zookeeper,你必须注意不要创建一个由一对节点组成的集群,否则共识算法将无法选举领导者,因为在投票阶段缺少多数。

说了这么多,我认为备份和恢复其中一个 Zookeeper 节点应该可行。如果您设置至少一个节点不能关闭(或者您为该节点使用持久存储),那就更容易了。

通过这种方式,您可以确保其中一个 Zookeeper 节点始终拥有最新数据,并将负责将其复制到其他节点。