每个子任务/分区是不是可以有一个窗口
Posted
技术标签:
【中文标题】每个子任务/分区是不是可以有一个窗口【英文标题】: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 量的处理时间,然后再将批处理发送到下游。
谢谢!
【问题讨论】:
【参考方案1】:没有好办法。
一种解决方法是在自定义接收器中实现批处理和超时逻辑。您希望实现CheckpointedFunction
接口以使您的解决方案具有容错性,并且您可以使用Sink.ProcessingTimeService.ProcessingTimeCallback
接口进行超时。
更新:
刚刚想到了另一种解决方案,类似于您在下面的评论中的解决方案。您可以实现一个发送周期性心跳的自定义源,并将其广播到 BroadcastProcessFunction。
【讨论】:
谢谢。我想这样做的限制是我无法在 Sink 上链接进一步的操作。目前,我已经确定了一个 FlatMap 并配置上游以发送定期消息以“推送”每个批次。以上是关于每个子任务/分区是不是可以有一个窗口的主要内容,如果未能解决你的问题,请参考以下文章