我有一个简单的Kafka集群,包含3个代理和3个zk节点。
如果我消灭2/3 zk节点并将它们带回来(即使是新的“干净”节点),一切都会恢复为zk重新同步。
如果我清除所有3个zk节点并重新启动它们“干净”(想想docker容器或AWS自动扩展组实例),那么经纪人就会感到困惑。 zk中的所有数据结构(基本路径,代理,主题等)都消失了,因为我有一个空白的zk。
如何从这种情况中恢复?我(可能)愿意接受丢失的主题(因为我们自动创建主题),但经纪人(与启动不同)不“知道”zk是空白的,因此不要重新初始化(设置结构,注册代理等) )。相反,只要我知道要备份/恢复的内容,我就可以备份zk并恢复它。
但关键要素是完全自动化的。在云原生中,我不能依靠人来进行恢复或检查。
答案 0 :(得分:3)
我不确定使用自动缩放管理Zookeeper节点(或Kafka代理)是个好主意。
对于一个Zookeeper维护主题信息(如果您没有使用最新的Kafka构建版本,或者使用旧消费者API,它也会维护消费者偏移量。)
除了该主题之外,分区被静态分配给代理,因此如果您关闭当前的Kafka代理并生成新节点,您必须非常小心并启动具有相同broker.id
的代理和数据否则Kafka可能迷茫。
关于Zookeeper的第三个问题,你必须小心不要创建一对节点的群集,否则由于在投票阶段缺少多数,共识算法将无法选出一个领导者。
说了这么多,我认为做一个Zookeeper节点的备份和恢复应该有效。如果你设置的东西至少有一个节点不能关闭(或者替代你使用那个节点的持久存储),那就更容易了。
通过这种方式,您可以确保其中一个Zookeeper节点始终具有最新数据,并且会将其复制到其他节点。