Backup/restore 卡夫卡和动物园管理员

Backup/restore kafka and zookeeper

我运行宁一个简单的kafka3节点和zookeeper5节点到运行kafka,我想知道这是备份我的 kafka 的好方法,同样适用于我的 zookeeper.

目前我只是将数据目录导出到 s3 存储桶...

谢谢。

Zalando 最近发表了一篇不错的文章how to backup Kafka and Zookeeper。 Kafka备份一般有2个路径:

  • 维护第二个 Kafka 集群,所有主题都复制到该集群。我还没有验证这个设置,但是如果偏移主题也被复制,那么切换到另一个集群应该不会损害消费者的处理状态。
  • 将主题转储到云存储,例如使用 S3 连接器(如 Zalando 所述)。在恢复的情况下,您重新创建主题并为其提供来自云存储的数据。这将允许您进行时间点恢复,但消费者必须从头开始阅读主题。

首选备份解决方案将取决于您的用例。例如。对于流式应用程序,第一种解决方案可能会给您带来更少的痛苦,而当使用 Kafka 进行事件溯源时,第二种解决方案可能更可取。

关于 Zookeeper,Kafka 保留有关主题(持久存储)以及代理发现和领导选举(临时)的信息。 Zalando 决定使用 Burry, which simply iterates over Zookeeper tree structure, dumps it to file structure, to later zip it and push to cloud storage. It suffers from ,但很可能它不会影响 Kafka 持久数据的备份(TODO 验证)。 Zalando 在那里描述,当恢复时,最好先创建 Zookeeper 集群,然后将一个新的 Kafka 集群连接到它(使用新的、唯一的代理 ID),然后恢复 Burry 的备份。 Burry 不会覆盖现有节点,不会放置有关旧代理的临时信息,备份中存储的内容。

注意:虽然提到了Exhibitor的使用,但是用Burry备份的时候,并不是真正需要备份。

Apache Kafka 已经使您的数据处于分布式状态,并且还提供了强大的一致性 replication 功能。

首先从架构设计的角度我们需要了解备份对我们意味着什么?

  • 它是为了在数据中心故障中幸存下来吗?

    正如您在评论中所说,想象一下当您的整个数据中心出现故障时的情况,这意味着该数据中心中的所有东西 运行 都消失了,而不仅仅是 kafka。要处理此类故障,您需要设计一个到不同数据中心的实时复制策略,您可以为此使用 kafka-mirror maker。您需要在不同的数据中心(不一定具有相同的硬件资源)设置一个 kafka 集群,然后将您当前数据中心的 Kafka 配置为镜像到另一个数据中心。

在数据中心范围内发生故障的情况下,您的所有服务都将 运行 来自此后备数据中心,并且它们将使用您的镜像 Kafka 作为主要 Kafka。

然后一旦其他数据中心恢复,您可以以相反的方式设置镜像,您可以回到您的旧(已损坏)数据中心。

  • 是否只备份Kafka/Zookeeper数据?

Kafka connect 有几个开箱即用的连接器,用于从具有一致性保证的 kafka 传输数据。因此,也许您可​​以选择 AWS S3 作为您的备份存储,而以下连接器可以为您做到这一点。

  • Confluent AWS S3 connector.
  • Pinterest has secor service 将数据传输到 AWS S3、Google 和 Mircosoft 云存储。 我相信您还可以为所有大型云提供商找到一些专用连接器。在将 Kafka 数据备份到高可用性云存储时需要考虑的几件事。

  • kafka 有一个每个主题的数据保留策略,所以旧数据会被 Kafka 自己从 Kafka 服务器中删除,但它仍然会留在你的 AWS S3 存储桶中,所以如果你直接复制如果发生恢复事件,你会看到更多关于 Kafka 代理的数据,而且将整个数据恢复到现有的 运行 Kafka 集群中也不是一个好主意,因为那样你将开始处理旧数据。所以在这个过程中要有选择性和小心

  • 对于zookeeper,你也可以将数据复制到AWS S3,但由于临时节点,你需要小心恢复。我发现很少 link 可以提供帮助:

https://jobs.zalando.com/tech/blog/backing-up-kafka-zookeeper/ https://www.elastic.co/blog/zookeeper-backup-a-treatise https://medium.com/@Pinterest_Engineering/zookeeper-resilience-at-pinterest-adfd8acf2a6b

最后,"Prevention is better than cure"。因此,如果您 运行 在像 AWS 这样的云提供商设置中,那么您可以通过预先考虑故障来部署集群设置。 link下面有一些信息。

https://aws.amazon.com/blogs/big-data/best-practices-for-running-apache-kafka-on-aws/