数据流被分区并分发到每个插槽以进行处理 . 现在我可以得到每个分区任务的结果 . 将某些函数应用于不同分区的结果并获得全局汇总结果的最佳方法是什么?
更新:我想实现一些数据汇总算法,如Flink中的Misra-Gries . 它将维护k个计数器并随数据到达而更新 . 由于数据可能具有较大的可扩展性,因此每个分区都有自己的k个计数器并处理并行更好 . 最后将这些计数器合并到最终的k计数器以显示结果 . 组合的最佳方式是什么?
Flink的内置聚合函数(如 reduce , sum 和 max )构建于Flink的托管键控状态机制之上,并且只能应用于 KeyedStream . 但是,您可以使用WindowAll或ProcessFunction . 这是一个例子:
reduce
sum
max
KeyedStream
parallelStream .process(new MyProcessFunction()) .setParallelism(1) .print() .setParallelism(1);
请注意,所有初步处理都是在默认并行处理中完成的,然后连续应用处理功能和打印 .
ProcessFunction 应保持其状态managed operator (non-keyed) state以便容错 .
ProcessFunction
这将在整个输入上产生不断更新的摘要流 . 如果您希望通过Windows生成摘要,请使用类似 countWindowAll 或 timeWindowAll 的内容 .
countWindowAll
timeWindowAll
1 回答
Flink的内置聚合函数(如
reduce
,sum
和max
)构建于Flink的托管键控状态机制之上,并且只能应用于KeyedStream
. 但是,您可以使用WindowAll或ProcessFunction . 这是一个例子:请注意,所有初步处理都是在默认并行处理中完成的,然后连续应用处理功能和打印 .
ProcessFunction
应保持其状态managed operator (non-keyed) state以便容错 .这将在整个输入上产生不断更新的摘要流 . 如果您希望通过Windows生成摘要,请使用类似
countWindowAll
或timeWindowAll
的内容 .