【问题标题】:Is it possible to have a window per sub-task/partition每个子任务/分区是否可以有一个窗口
【发布时间】:2021-01-22 05:13:37
【问题描述】:

我正在使用 Flink 使用来自具有多个分区的 Kafka 主题的数据。是否可以在每个并行子任务/分区上都有一个窗口而不必使用keyBy(因为我想避免洗牌)。根据文档,我只能在键控窗口(需要随机播放)或全局窗口(将并行度降低到 1)之间进行选择。

动机是我想使用CountWindow 通过自定义触发器来批处理消息,该触发器也会在设定的处理时间后触发。因此,对于每个 Kafka 分区,我想将 N 条记录一起批处理或等待 X 量的处理时间,然后再将批处理发送到下游。

谢谢!

【问题讨论】:

    标签: apache-flink flink-streaming


    【解决方案1】:

    没有好办法。

    一种解决方法是在自定义接收器中实现批处理和超时逻辑。您希望实现CheckpointedFunction 接口以使您的解决方案具有容错性,并且您可以使用Sink.ProcessingTimeService.ProcessingTimeCallback 接口进行超时。

    更新:

    刚刚想到了另一种解决方案,类似于您在下面的评论中的解决方案。您可以实现一个发送周期性心跳的自定义源,并将其广播到 BroadcastProcessFunction。

    【讨论】:

    • 谢谢。我想这样做的限制是我无法在 Sink 上链接进一步的操作。目前,我已经确定了一个 FlatMap 并配置上游以发送定期消息以“推送”每个批次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    相关资源
    最近更新 更多