Background
ValueState
文档指出:partitioned single-value state
.ReducingState
文档指出:combined using a reduce function
。AggregatingState
文档指出:eagerly pre-aggregated
。ValueState
扩展State
,而ReducingState
和AggregatingState
都扩展MergingState
。
问题
- 各州何时合并?
- 我应该如何为某个问题选择正确的状态原语?
- 什么机制调用归约和聚合函数?它跳过非
MergingState
吗?
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
是通用(键控(状态。因此,当您实现泛型函数时,您最终会使用它,而不是聚合器或化简器(使用组合器(。