备份/恢复kafka和zookeeper

sta*_*ter 8 backup restore apache-kafka apache-zookeeper

我正在运行一个简单的3节点kafka和5个节点zookeeper来运行kafka,我想知道哪个是备份我的好方法kafka,同样适合我zookeeper.

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

谢谢.

krz*_*chu 10

Zalando最近发表了很好的文章,如何备份Kafka和Zookeeper.通常,Kafka备份有两条路径:

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

首选备份解决方案取决于您的使用案例.例如,对于流应用程序,第一种解决方案可能会减少您的痛苦,而当使用Kafka进行事件采购时,第二种解决方案可能更为理想.

关于Zookeeper,Kafka保留有关主题(持久存储)以及经纪人发现和领导者选举(短暂)的信息.Zalando决定使用Burry,它简单地遍历Zookeeper树结构,将其转储到文件结构,然后将其压缩并推送到云存储.它遇到了一个小问题,但很可能它不会影响Kafka持久数据的备份(TODO验证).Zalando在那里描述,在恢复时,最好首先创建Zookeeper集群,然后将新的Kafka集群连接到它(使用新的唯一代理ID),然后恢复Burry的备份.Burry不会覆盖现有节点,也不会提供有关旧代理的短暂信息,以及备份中存储的内容.

注意:尽管他们提到参展商的使用情况,但在备份Burry时并不需要备份.


Pee*_*ush 7

Apache Kafka 已经使您的数据保持分布式并提供强大的一致复制功能。

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

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

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

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

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

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

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

  • 汇合 AWS S3 连接器。
  • Pinterest 拥有将数据传输到 AWS S3、Google 和 Mircosoft 云存储的secor 服务。我相信您还可以为所有大型云提供商找到一些专用连接器。在将 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/