Apache Flink:ConnectedStreams 中 ValueState 的范围
Apache Flink: Scope of ValueState in ConnectedStreams
我有一个使用 ValueState
成员的自定义 RichCoFlatMapFunction
。文档说
the key/value interface is scoped to the key of the current input element
如果我像这样键入连接的流会怎样:
val connected = streamA
.connect(streamB)
.keyBy(a=>a.foo, b=>b.bar)
.flatMap(new MyRichCoFlatMapFunction)
那么语义如何?它是第一个、第二个还是两者的组合?
keyBy
(a => a.foo
) 的第一个参数定义了第一个流 (streamA
) 的键。第二个参数 (b => b.bar
) 第二个流 (streamB
) 的键。两个参数必须 return 相同类型的键,即 a.foo
和 b.bar
的类型必须相同。
connect operator 将使用相同的密钥将来自 streamA
和 streamB
的所有记录发送给同一个 operator。有状态 RichCoFlatMapFunction
将为当前元素的键设置 ValueState
,即,如果为 streamA
中的值调用 flatMap1(a: TypeA, out: Collector[TypeOut])
,则为键设置状态a.foo
并且如果为 streamB
中的值调用 flatMap2(b: TypeB, out: Collector[TypeOut])
,则为键 b.bar
设置状态。
我有一个使用 ValueState
成员的自定义 RichCoFlatMapFunction
。文档说
the key/value interface is scoped to the key of the current input element
如果我像这样键入连接的流会怎样:
val connected = streamA
.connect(streamB)
.keyBy(a=>a.foo, b=>b.bar)
.flatMap(new MyRichCoFlatMapFunction)
那么语义如何?它是第一个、第二个还是两者的组合?
keyBy
(a => a.foo
) 的第一个参数定义了第一个流 (streamA
) 的键。第二个参数 (b => b.bar
) 第二个流 (streamB
) 的键。两个参数必须 return 相同类型的键,即 a.foo
和 b.bar
的类型必须相同。
connect operator 将使用相同的密钥将来自 streamA
和 streamB
的所有记录发送给同一个 operator。有状态 RichCoFlatMapFunction
将为当前元素的键设置 ValueState
,即,如果为 streamA
中的值调用 flatMap1(a: TypeA, out: Collector[TypeOut])
,则为键设置状态a.foo
并且如果为 streamB
中的值调用 flatMap2(b: TypeB, out: Collector[TypeOut])
,则为键 b.bar
设置状态。