Apache flink Flink:ValueState与ReductionState/AggregatingState之比较 背景 ValueState文档状态:分区单值状态 reducestate文档状态:使用reduce函数组合而成 聚合状态文档状态:急切地预聚合 ValueState扩展State,而reduceingstate和AggregatingState扩展MergingState 问题 各州何时合并 我应该如何为某个问题选择正确的状态原语 什么机制调用reduce和aggregate函数?它是否跳过非MergingState

Apache flink Flink:ValueState与ReductionState/AggregatingState之比较 背景 ValueState文档状态:分区单值状态 reducestate文档状态:使用reduce函数组合而成 聚合状态文档状态:急切地预聚合 ValueState扩展State,而reduceingstate和AggregatingState扩展MergingState 问题 各州何时合并 我应该如何为某个问题选择正确的状态原语 什么机制调用reduce和aggregate函数?它是否跳过非MergingState,apache-flink,Apache Flink,Fabian Hueske不久前(2018年5月6日)回答了我关于在AggregateFunctions中合并的问题。他说, 在数据流作业(我知道)中调用merge()的唯一情况是会话窗口被合并。 例如,当您定义一个间隔为30分钟的会话窗口时,您会收到以下记录 R1,12:00:00 R2,12:05:00 R3,12:40:00 R4,12:20:00 在这种情况下,Flink R1将创建一个新窗口W1,R2将分配给W1,R3>创建一个新窗口W2,R4连接并合并W1和W2 我认为对你其他问题的

Fabian Hueske不久前(2018年5月6日)回答了我关于在AggregateFunctions中合并的问题。他说,

在数据流作业(我知道)中调用merge()的唯一情况是会话窗口被合并。 例如,当您定义一个间隔为30分钟的会话窗口时,您会收到以下记录 R1,12:00:00 R2,12:05:00 R3,12:40:00 R4,12:20:00

在这种情况下,Flink R1将创建一个新窗口W1,R2将分配给W1,R3>创建一个新窗口W2,R4连接并合并W1和W2


我认为对你其他问题的部分回答是,
ValueState
是通用(键控)状态。因此,当您实现泛型函数时,而不是聚合器或还原器(使用合并器)时,您最终会使用它。

在上面提到的
merge()
案例中,如何合并
ValueState
ValueState
不会扩展
MergingState
,因此它不用于合并。
ValueState
表示您在自定义函数中管理的状态。您所说的“自定义函数”或“通用函数”指的是什么?我在文档中找不到可以使用
ValueState
的情况,而应该避免使用
AggregatingState
。如果我说
MyFunction扩展了RichMapFunction
,我需要维护状态,那么我会使用
ValueState
(或
ListState
MapState
)。因此,在本例中,
MyFunction
是一个自定义函数,而不是使用带有累加器函数的
AggregatingState