Apache kafka 备份/恢复卡夫卡和zookeeper

Apache kafka 备份/恢复卡夫卡和zookeeper,apache-kafka,backup,apache-zookeeper,restore,Apache Kafka,Backup,Apache Zookeeper,Restore,我正在运行一个简单的3节点kafka和5节点zookeeper来运行kafka,我想知道备份我的kafka的好方法是什么,我的zookeeper也是这样 目前,我只是将我的数据目录导出到一个s3 bucket 谢谢。扎兰多最近发表了一篇不错的文章。卡夫卡备份通常有两条路径: 维护第二个Kafka集群,所有主题都复制到该集群。我还没有验证这个设置,但是如果偏移主题也被复制,那么切换到另一个集群应该不会损害消费者的处理状态 将主题转储到云存储,例如使用S3连接器(如Zalando所述)。在恢复的情

我正在运行一个简单的3节点
kafka
和5节点
zookeeper
来运行
kafka
,我想知道备份我的
kafka
的好方法是什么,我的
zookeeper
也是这样

目前,我只是将我的数据目录导出到一个s3 bucket


谢谢。

扎兰多最近发表了一篇不错的文章。卡夫卡备份通常有两条路径:

  • 维护第二个Kafka集群,所有主题都复制到该集群。我还没有验证这个设置,但是如果偏移主题也被复制,那么切换到另一个集群应该不会损害消费者的处理状态
  • 将主题转储到云存储,例如使用S3连接器(如Zalando所述)。在恢复的情况下,您可以重新创建主题,并从云存储中向其提供数据。这将允许您进行时间点恢复,但消费者必须从头开始阅读主题
首选的备份解决方案将取决于您的用例。例如,对于流媒体应用程序,第一种解决方案可能会减少您的痛苦,而当使用Kafka进行事件源时,第二种解决方案可能更可取

关于Zookeeper,卡夫卡在那里保存关于主题(持久存储)以及经纪人发现和领导人选举(短暂)的信息。Zalando决定使用Zookeeper,它只需迭代Zookeeper树结构,将其转储到文件结构,然后压缩并推送到云存储。它会受到影响,但很可能不会影响Kafka持久数据的备份(TODO verify)。Zalando在那里描述说,在恢复时,最好先创建Zookeeper集群,然后将一个新的Kafka集群连接到它(使用新的、唯一的代理ID),然后恢复Burry的备份。Burry不会覆盖现有节点,也不会将有关旧代理的短暂信息、存储在备份中的内容放入备份中


注意:尽管他们提到了参展商的使用,但在使用Burry进行备份时,实际上并不需要使用它进行备份。

Apache Kafka已将您的数据保持分布式,并提供了强大的一致性功能

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

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

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

在数据中心范围内发生故障的情况下,您的所有服务都将从此回退数据中心运行,并且它们将使用镜像卡夫卡作为主要卡夫卡

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

  • 它只是在备份卡夫卡/动物园管理员的数据吗
Kafka connect有两个现成的连接器,用于在一致性保证的情况下从Kafka传输数据。因此,也许您可以选择AWS S3作为备份存储,下面的连接器可以为您做到这一点

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

  • kafka对每个主题都有数据保留策略,因此旧数据将由kafka自己从kafka服务器中删除,但它仍将保留在您的AWS S3存储桶中,因此,如果在发生恢复事件时直接将其复制回来,那么您将在Kafka代理上看到更多数据,而且将整个数据恢复到现有运行的Kafka集群中也不是一个好主意,因为这样您将开始处理旧数据。因此,在这个过程中要有选择性和谨慎

  • 对于zookeeper,您也可以将数据复制到AWS S3,但由于存在临时节点,因此在恢复时需要小心。我发现了几个有帮助的链接:

最后,“预防胜于治疗”。因此,如果您在AWS这样的云提供商设置中运行,那么您可以通过预先考虑故障来部署集群设置。下面的链接有一些信息


因为您正在复制模式下运行。备份是什么意思?如果我的卡夫卡所在的数据中心烧坏了,我该怎么做?即使我得到了复制,我也希望能够对其进行备份和恢复:)kafka中的消息生存时间有限,不管怎样,是否要存储当前状态,还是卡夫卡所包含的所有数据的历史系列?你可以考虑在另一个地理位置上运行另一个卡夫卡集群并复制流向它。“杰夫,这就是我最近添加的内容。我只想要当前状态,以防维护另一个Kafka群集,并想象原始群集因高网络负载或任何其他原因而中断的情况,如果将数据复制到该群集,则确保第二个群集不会因相同原因失败。虽然我希望卡夫卡不会因为高网络负载而损坏数据,但我希望它仍能受到人为错误的保护。Kafka Streams越来越流行,它存储处理状态。在某些情况下,停机并可能丢失一些数据,但恢复意外损坏的状态比让它在损坏的状态下运行要容易得多。不过,这将取决于您的用例,取决于您是否真正关心。对于我们的用例,我们是