【问题标题】:Is there a way to limit the size of avro files when writing from kafka via hdfs connector?通过 hdfs 连接器从 kafka 写入时,有没有办法限制 avro 文件的大小?
【发布时间】:2019-01-15 10:37:44
【问题描述】:

目前我们使用 Flink FsStateBackend 检查点并设置 fileStateSizeThreshold 来限制写入 HDFS 上的 avro/json 文件的数据大小为 128MB。在检查点操作有一定延迟后也会关闭文件。

由于我们没有在新项目中使用高级 Flink 功能,我们希望使用带有 Kafka Connect HDFS Connector 的 Kafka Streaming 将消息直接写入 hdfs(无需启动 Flink)

但是我找不到是否有选项可以限制来自 kafka 连接器的 hdfs 文件的文件大小,除了 flush.size 似乎限制了记录数。

如果连接器上没有设置,人们如何以另一种方式管理来自 hdfs 上的流数据的文件大小?

【问题讨论】:

    标签: apache-kafka hdfs apache-flink apache-kafka-connect


    【解决方案1】:

    没有文件大小选项,只有基于时间的旋转和刷新大小。您可以设置一个您从未想过会达到的大刷新大小,然后基于时间的轮换将尽最大努力将大文件分区到日期分区(我们已经能够在每个主题分区中获得 4GB 输出文件Connect 的一个小时目录)

    就个人而言,我建议使用其他工具,例如 Hive、Pig、DistCp、Flink/Spark,具体取决于可用的工具,而不是一次全部在 Oozie 作业中运行以将这些流文件“压缩”成更大的文件。

    my comment here


    在 Connect 之前,有 Camus,现在是 Apache Gobblin。在该项目中,它提供了压缩和后期事件处理 + Hive 表创建的想法


    这里的一般答案是,您为流数据指定了一个“热着陆区”,然后您会定期将其存档或“冻结”它(这会带来像 Amazon Glacier/Snowball 和Snowplow 这样的技术名称)

    【讨论】:

    • 感谢您的回答。我确实喜欢这些解决方案,但我真的不想为存档添加额外的处理步骤。特别是因为接收器将成为“即服务管道”的一部分,我们可以在其中为不同的租户启动不同的 kafka 集群。我真的很想使用单个消费者/接收器,它将在某个窗口或大小之后存储传入数据,例如 Flink BucketingSink:ci.apache.org/projects/flink/flink-docs-master/api/java/org/…
    • 好吧,好吧,如果那是你想要的功能,那就使用 Flink,然后
    • 我可以,但我只是想检查是否有一个选项,我可以使用 kafka 连接器而不启动 flink 集群。将 flink 仅作为 kafka 主题的数据接收器运行似乎很浪费且可能不必要的开销
    • Confluent 连接器中不存在该选项。您也许可以找到其他一些可以完成此操作的方法,但是在创建新文件时,基于大小创建文件对我来说似乎有两种极端情况。例如,Kafka 记录的大小和到达时间可能会有所不同,所以如果你得到 2 小时前的记录,它会创建一个新文件还是附加到一个文件?如果之前写入的文件超过了大小限制,您仍然会有小文件。如果你得到跨越“当前文件”阈值的记录,它会开始一个新文件,还是追加到那里,如果是新的,那么会有小文件
    猜你喜欢
    • 2018-03-03
    • 1970-01-01
    • 2020-06-11
    • 2019-12-27
    • 2021-10-04
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多