这是一个一次性工具(意味着它在备份完成后不需要在后台运行),因此对后台守护进程的依赖很有趣。 根本不需要将 kafka-connect 作为守护进程运行。
您对还原过程是正确的。 恢复是一次性的活动。
备份是一个持续运行的活动。 Kafka 中没有“我完成了备份”,因为 Kafka 数据是一个流,它没有尽头。 当然,您可以假设如果您在 x 秒内没有获得任何新数据,那么您就“完成”了,但您不能一概而论。
查看 #46 和 #54 了解更多
@itadventurer
备份是一个持续运行的活动。
这假设连续的数据流是 24x7x365,这并不适用于所有情况。 在我们的例子中,流每天只运行 X 小时,备份仅在此之后发生,实际上是作为数据的每日备份/快照。
我认为应该有一种方法来(内部)检测 X 时间(可能是可配置的时间间隔)内没有任何新消息,在此之后备份进程将正常退出并因此终止该进程。
另一种(可能更简单)的替代方法是仅备份直到备份开始时的时间戳的消息。 不确定这将如何与备份偏移量一起发挥作用。 也许首先备份偏移量,然后我们知道备份偏移量的时间戳,我们可以备份消息直到该时间戳。
我明白你的意思。 是的,有办法进行时间点备份可能会很好:思考:
尽管如此,这并非微不足道,因为没有简单的方法来确定流是否“完成”。
在你的情况下你可以做什么:
kill -9
Kafka 备份一旦“完成”,即完成写入您的数据。 这应该在您完成数据生成后立即进行我知道这是一个非常常见的用例,我将在 #2 中提供更多文档。 对于 v0.1 文档是最后一个大问题,所以希望这应该很快发生;)
我看到以下方法
--snapshot
(或添加一个名为backup-snapshot.sh
的新工具)如何检测备份何时“完成”(仅适用于设置了--snapshot
标志的情况):
你怎么认为?
让Kafka Backup在后台运行
问题正是在这一步。 我们不能让它在后台运行。 当我们可以做快照时,我们只有一个特定的窗口。 何时可以进行备份不是由我们决定的,这是外部监管要求。
我们记得备份开始的时间。 备份期间将忽略具有较新时间戳的所有记录
是的,这正是我的意思,我认为这将消除让它在后台运行的要求(并试图抓住所有生产者完成的时刻)。
当分区在一段时间内(例如 20 秒)没有产生任何新数据时,我们假设没有新数据
我认为这个选项与另一个是互斥的。 而且我认为第一个更好,因为它提供了特定的参考点,并且在没有消息时不依赖于查找窗口。
实际上,我想写这对于 Kafka 来说几乎是不可能的,但是在写作时我想到了一个解决方案:
kafka-consumer-groups
返回消费者在分区中的当前位置,但更有趣的是它返回每个特定分区的当前结束偏移量。 这意味着有一种方法可以在某个时间点获取分区的最新偏移量。 我目前不知道这是如何实现的(需要检查代码)。
所以现在有一条清晰的路径如何进行(或多或少)时间点备份:
>=
,该分区的保存记录就记住这一点。 忽略备份中的所有记录。 (见 https://github.com/itadventurer/kafka-backup/blob/master/src/main/java/de/azapps/kafkabackup/sink/BackupSinkTask.java#L63)你看这真的不是那么简单。
我目前的重点是改进测试套件并稳定第一个版本的 Kafka 备份(参见 https://github.com/itadventurer/kafka-backup/milestone/1)。 我无法为您提供该功能的预计到达时间。 我很乐意为此审查 PR(我也在寻找其他维护者;))如果有任何问题,我很乐意提供帮助
你看这真的不是那么简单。
我更关注操作方面的事情(比如设置、监控 Kafka 集群等)。 所以在这方面我相信你。 我的观点是,从我的工作角度来看,这是我(以及很确定其他许多人)确实需要的。
我很乐意为此审查 PR(我也在寻找其他维护者;))
我对 Java/Scala 不太擅长,所以在这里没有太大帮助。 如果是 Python、C/C++ 或至少是 Go,我可以提供帮助:P
你好!
起初 - 我很高兴找到您的解决方案,因为我必须备份 kafka 主题数据
第二个 - 不幸的是我不能用 Java/Scala 写任何东西,所以我为你准备了“包装器”,用 python 为你提供完整的备份解决方案“backup-standalone.sh”
https://gist.github.com/FloMko/7adf2e00cd80fe7cc88bb587cde999ce
很高兴看到有关时间点备份的任何内置支持的任何更新
嘿,
感谢您的工作! 作为临时解决方法,我可以想象将此作为附加脚本添加到此 repo 中,并稍后用内置解决方案替换它。 随意将其添加为拉取请求:)(添加到./bin/kafka-backup-point-in-time.py
或其他内容;))
我即将发布用 Go 编写的完全独立的实现,它不依赖于连接 API。 仅供参考。 我们已经在我们的生产环境中使用它。
@akamensky你能分享你的解决方案吗? 只要你测试过你的解决方案就可以了
@FloMko我们刚刚发布了它。 您可以在此处找到它(以及重建的二进制文件)
谢谢@WesselVS的 PR #99! 我刚刚将它合并到master。 将很快发布具有此增强功能和其他一些修复的版本。
@akamensky酷! 很高兴看到更多关于 Kafka 备份的工作;)