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