通过 hdfs 连接器从 kafka 写入时,有没有办法限制 avro 文件的大小?

Is there a way to limit the size of avro files when writing from kafka via hdfs connector?

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

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

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

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

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

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

my comment here


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

的想法

这里的一般答案是你有一个指定的 "hot landing zone" 用于流数据,然后你定期存档它或 "freeze" 它(这带来了像亚马逊这样的技术名称 Glacier/Snowball & Snowplow)