备份/恢复kafka和zookeeper

问题描述 投票:0回答:2

我正在运行一个简单的 3 个节点的

kafka
和 5 个节点的
zookeeper
来运行
kafka
,我想知道哪种是备份我的
kafka
的好方法,对于我的
zookeeper
也是如此。

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

谢谢。

apache-kafka backup apache-zookeeper restore
2个回答
12
投票

Zalando 最近发表了一篇不错的文章 如何备份 Kafka 和 Zookeeper。一般Kafka备份有2条路径:

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

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

对于 Zookeeper,Kafka 保存有关主题的信息(持久存储),以及用于代理发现和领导者选举(临时)的信息。 Zalando 选择使用 Burry,它只是迭代 Zookeeper 树结构,将其转储到文件结构,稍后将其压缩并推送到云存储。它遇到了“一个小问题”,但很可能它不会影响 Kafka 持久数据的备份(TODO 验证)。 Zalando 在那里描述,在恢复时,最好首先创建 Zookeeper 集群,然后将一个新的 Kafka 集群连接到它(使用新的、唯一的代理 ID),然后恢复 Burry 的备份。 Burry 不会覆盖现有节点,不会放置有关旧代理的临时信息以及备份中存储的内容。 注意:虽然他们提到了 Exhibitor 的使用,但在使用 Burry 备份时并不真正需要它。


7
投票
复制

功能。 首先从架构设计的角度来看,我们需要了解备份对我们来说意味着什么?

    是为了在数据中心故障时幸存下来吗?
  • 正如您在评论中所说,想象一下当您的整个数据中心宕机时的情况,那么这意味着该数据中心中运行的所有内容都消失了,而不仅仅是卡夫卡。为了处理此类故障,您需要设计一个到不同数据中心的实时复制策略,您可以使用

    kafka-mirror

    maker来实现。您需要在不同的数据中心设置一个 kafka 集群(不一定具有相同的硬件资源),然后将您当前的数据中心 Kafka 配置为在另一个数据中心上进行镜像。

  • 如果发生数据中心范围内的故障,您的所有服务都将从该后备数据中心运行,并且它们将使用您的镜像 Kafka 作为主 Kafka。

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

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

    Confluence AWS S3 连接器。
  • Pinterest 拥有安全服务

    ,可将数据传输到 AWS S3、Google 和 Mircosoft 云存储。 我相信您还可以找到一些适用于所有大型云提供商的专用连接器。将 Kafka 数据备份到高可用的云存储时需要考虑的事项很少。

  • kafka 每个主题都有一个数据保留策略,因此 Kafka 本身会从 Kafka 服务器中删除旧数据,但它仍会保留在您的 AWS S3 存储桶中,因此如果您在发生恢复事件时直接将其复制回来那么您将在 Kafka 代理上看到更多数据,并且将整个数据恢复到现有正在运行的 Kafka 集群中也不是一个好主意,因为这样您将开始处理旧数据。 所以在这个过程中要小心谨慎
  • 对于zookeeper,您也可以将数据复制到AWS S3,但由于存在临时节点,因此在恢复时需要小心。我发现了一些可以提供帮助的链接:
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 最后,“预防胜于治疗”。因此,如果您在 AWS 等云提供商设置中运行,那么您可以通过预先考虑故障来部署集群设置。下面的链接有一些信息。

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

© www.soinside.com 2019 - 2024. All rights reserved.