【问题标题】:How to take a dump of data from hosted kafka cluster and import the data into local kafka cluster?如何从托管的 kafka 集群中转储数据并将数据导入本地 kafka 集群?
【发布时间】:2018-06-16 04:32:22
【问题描述】:

我在kubernetes 有一个 Kafka 集群,里面有很多测试数据。我希望将部分/全部测试数据导入我的本地 Kafka 集群。这样,我可以更轻松地在本地环境中使用来自 kubernetes 的实际数据执行测试。

那么,有没有办法将例如:5000 条来自 kafka 主题的消息转储到文件中并将它们恢复到本地 kafka 主题中?

【问题讨论】:

  • 还可以考虑kubectl cp,它可以让您将 kafka 和 zookeeper 数据目录复制到本地目录。不确定这是否适用于尚未 fsync 的数据等
  • 还要考虑 kafka-rest-proxy 吗?不完全是数据转储,但可以让您访问您的数据
  • @DmitryMinkovsky 我检查了 MirrorMaker。当我必须将一个主题完全复制到另一个集群时,这似乎很有帮助。但是我没有找到仅迁移部分或一定数量的主题数据的任何选项。这是因为我可能不需要本地机器中的所有云主题数据。
  • 是的,不完全是。我也一直在寻找这个问题的答案。知道的请留言。

标签: apache-kafka kubernetes


【解决方案1】:
  1. Replicator 是一种商业工具,可让您将主题从一个集群复制到另一个集群。不过,与 MirrorMaker 类似,它旨在复制整个主题,而不仅仅是其中的一部分。

  2. 如果您只想要某种 hacky 选项,但您可以使用 kafkacatstdin/stdout,但您可以使用分区、主题配置以及您想要匹配的所有内容以确保准确测试您必须确保正确完成。

【讨论】:

    【解决方案2】:

    我们这样做的方式(不是在 Kubernetes 上,但在这种情况下无关紧要)是:

    1. 如果我们需要将部分数据从生产集群复制到本地/测试集群 - 我们启动一个 Flume 代理,该代理从 prod Kafka 集群读取并推送到测试集群。这仅适用于实时数据(当您现在开始复制过程并让它在需要的任何时间运行,捕获实时流量),或者如果可以从最早的偏移量开始获取数据 - 因为 vanilla Flume 本身不允许您指定要从主题中使用的特定偏移范围 (AFAIK)
    2. 如果我们确实需要来自特定偏移范围的数据 - 我们只需运行一个非常简单的 Java 客户端(我们自己的自定义客户端,只需几行代码),它会寻找开始偏移并读取直到指定的结束偏移源集群/主题的 - 并将事件发送到目标 Kafka 集群/主题

    我们发现这些方法比使用 MirrorMaker 等更复杂的工具/框架更简单、更灵活。

    【讨论】:

    • 为什么说flume代理比mirromaker简单。另外,我对flume一无所知:它会保留时间戳等记录元数据吗?
    • 是的,“更简单”是一个主观术语 :) 根据我们和其他人的研究(例如来自 Uber - eng.uber.com/ureplicator - 虽然,当然,它基于旧版本),它看起来您在设置 MirrorMaker 以实现零数据丢失传输时必须非常小心,尤其是在目标集群周期性不可用/网络问题的情况下。当然是可行的——但付出了不可忽视的努力。我们已经将 Flume 用于数据收集,因此再设置一个具有持久通道和磁盘溢出的代理是“容易的”:)。只是多了一种选择。
    • 哦,是的,事件元数据(如时间戳)在 headers 中,默认情况下 Flume 保留所有 headers,尽管您也可以根据需要修改它们。
    • 谢谢。我目前的主要用例是将生产数据传输到本地计算机。这不是那么容易!我会检查一下水槽。
    猜你喜欢
    • 1970-01-01
    • 2023-01-25
    • 2021-08-22
    • 2021-01-27
    • 2011-11-30
    • 2020-09-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多