我正在使用来自具有多个分区的Kafka主题的数据来处理Flink。有没有可能在每个并行子任务/分区上都有一个窗口,而不必使用keyBy
(因为我想避免混乱)。根据文档,我只能在键控窗口(需要混洗)或全局窗口(将并行度降低到1)之间进行选择。
这样做的动机是,我希望使用CountWindow
来批处理具有自定义触发器的消息,该触发器也会在设置的处理时间后触发。因此,对于每个Kafka分区,我希望将N个记录一起批处理,或者在将批发送到下游之前等待X个量的处理时间。
谢谢!
发布于 2021-01-22 12:50:26
没有好的方法可以做到这一点。
一种解决方法是在自定义接收器中实现批处理和超时逻辑。您可能希望实现CheckpointedFunction
接口以使您的解决方案具有容错能力,并且可以使用Sink.ProcessingTimeService.ProcessingTimeCallback
接口来设置超时。
更新:
只需想出另一种解决方案,类似于您下面评论中的解决方案。您可以实现一个发送周期性心跳的定制源,并将其广播到BroadcastProcessFunction。
https://stackoverflow.com/questions/65839654
复制