备份/恢复kafka和zookeeper

时间:2017-12-13 10:41:50

标签: apache-kafka backup apache-zookeeper restore

我正在运行kafka的简单3节点和zookeeper的5个节点来运行kafka,我想知道哪个是备份我{{1}的好方法}},同我的kafka

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

感谢。

2 个答案:

答案 0 :(得分:8)

Zalando最近发表了很好的文章how to backup Kafka and Zookeeper。通常,Kafka备份有两条路径:

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

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

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

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

答案 1 :(得分:3)

Apache Kafka已经使您的数据保持分布式,并且还提供了强大的一致replication功能。

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

  • 这是否可以解决数据中心故障?

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

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

然后,当另一个数据中心返回时,您可以以相反的方式设置镜像,然后可以使用旧的(已破坏)数据中心。

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

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

  • Confluent AWS S3 connector.
  • Pinterest has secor service,它将数据传输到AWS S3,Google和Mircosoft Cloud存储。 我相信您也可以找到适用于所有大型云提供商的专用连接器。将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/