使用windowAll()实现自定义分区

问题描述 投票:0回答:1

我正在尝试在 apache flink 中使用窗口来实现自定义分区。目前我有以下内容:

DataStream<Tuple2<String, Integer>> split = operatorAggregateStream
                .partitionCustom(new RoundRobin(), value->value.f0 )
                .windowAll(TumblingEventTimeWindows.of(Time.seconds(5)))
                .process(new MaxPartialWindowProcessFunction());

问题是我需要窗口化,但使用

windowAll
会覆盖我的分区并创建不同的分区。

我的新解决方案是强制自己实现窗口化,但我觉得这是矫枉过正。有什么解决办法吗?

apache-flink flink-streaming
1个回答
0
投票

windowAll操作强制并行度为1(所有记录必须发送到同一个子任务),因为它在非键控流上进行操作。这就是为什么您之前所做的分区没有用,因为 Flink 将插入一个重新平衡,强制流并行度为 1。

你说“我需要窗口”,这意味着你需要一个键控流。您可以在没有窗口的情况下对分区记录执行操作,但您将无法使用计时器来触发窗口评估,因为这需要一个键控流。

© www.soinside.com 2019 - 2024. All rights reserved.