【问题标题】:How to make Flink write to HDFS everytime the window is finished?每次窗口结束时如何让 Flink 写入 HDFS?
【发布时间】:2022-01-04 14:07:34
【问题描述】:

我是 Flink 的初学者,我的问题是,我的 Flink App 消耗一个实时流,我想在每个“自然”小时聚合流的 uv,然后将 agg 结果写入 HDFS .我可以使用

ds.window(TumblingProcessingTimeWindows.of(Time.hours(1))).maxBy(1)

实现聚合工作,但是每小时写一次,但是,bucketingSink 类只能接受程序开始时开始的时间间隔,而不是“自然”小时,比如,从 14:50:00 开始,next触发时间将是 15:50:00,而不是 15:00:00。功能是

bucketingSink.setBatchRolloverInterval(1*60*1000L)

我目前找不到使每次窗口功能完成时都触发写入过程的解决方案,谁能给我一些提示? 多谢了。

【问题讨论】:

  • 你使用的是什么版本的 Flink?桶式水槽已被弃用并在一段时间前被移除。您可以使用 FileSink 或 StreamingFileSink 吗?
  • @DavidAnderson 我的 Flink 版本是 1.9.1。 FileSink/StreamingFileSink 没听说过,1.9.1 支持吗?谢谢

标签: hdfs apache-flink real-time


【解决方案1】:

BucketingSink 存在一些缺陷,在 Flink 1.9 中已被弃用;它在 Flink 1.12 中被删除。我建议您更新您的接收器以使用 StreamingFileSink:https://nightlies.apache.org/flink/flink-docs-release-1.9/dev/connectors/streamfile_sink.html

然后你会想要实现一个自定义的bucket assigner,也许还有一个rolling policy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多