我正在运行一个简单的 3 个节点的
kafka
和 5 个节点的 zookeeper
来运行 kafka
,我想知道哪种是备份我的 kafka
的好方法,对于我的 zookeeper
也是如此。
目前我只是将数据目录导出到 s3 存储桶...
谢谢。
Zalando 最近发表了一篇不错的文章 如何备份 Kafka 和 Zookeeper。一般Kafka备份有2条路径:
首选备份解决方案将取决于您的使用案例。例如。对于流应用程序,第一种解决方案可能会给您带来更少的痛苦,而当使用 Kafka 进行事件溯源时,第二种解决方案可能更理想。
对于 Zookeeper,Kafka 保存有关主题的信息(持久存储),以及用于代理发现和领导者选举(临时)的信息。 Zalando 选择使用 Burry,它只是迭代 Zookeeper 树结构,将其转储到文件结构,稍后将其压缩并推送到云存储。它遇到了“一个小问题”,但很可能它不会影响 Kafka 持久数据的备份(TODO 验证)。 Zalando 在那里描述,在恢复时,最好首先创建 Zookeeper 集群,然后将一个新的 Kafka 集群连接到它(使用新的、唯一的代理 ID),然后恢复 Burry 的备份。 Burry 不会覆盖现有节点,不会放置有关旧代理的临时信息以及备份中存储的内容。 注意:虽然他们提到了 Exhibitor 的使用,但在使用 Burry 备份时并不真正需要它。
功能。 首先从架构设计的角度来看,我们需要了解备份对我们来说意味着什么?
正如您在评论中所说,想象一下当您的整个数据中心宕机时的情况,那么这意味着该数据中心中运行的所有内容都消失了,而不仅仅是卡夫卡。为了处理此类故障,您需要设计一个到不同数据中心的实时复制策略,您可以使用
kafka-mirrormaker来实现。您需要在不同的数据中心设置一个 kafka 集群(不一定具有相同的硬件资源),然后将您当前的数据中心 Kafka 配置为在另一个数据中心上进行镜像。
然后,一旦另一个数据中心恢复,您可以以相反的方式设置镜像,然后就可以来到您的旧(已损坏)数据中心。
只是备份Kafka/Zookeeper数据吗?
,可将数据传输到 AWS S3、Google 和 Mircosoft 云存储。 我相信您还可以找到一些适用于所有大型云提供商的专用连接器。将 Kafka 数据备份到高可用的云存储时需要考虑的事项很少。
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/