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

https://ci.apache.org/projects/flink/flink-docs-master/dev/state.html#using-the-keyvalue-state-interface

如果我像这样键入连接的流会怎样:

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.foob.bar 的类型必须相同。

connect operator 将使用相同的密钥将来自 streamAstreamB 的所有记录发送给同一个 operator。有状态 RichCoFlatMapFunction 将为当前元素的键设置 ValueState,即,如果为 streamA 中的值调用 flatMap1(a: TypeA, out: Collector[TypeOut]),则为键设置状态a.foo 并且如果为 streamB 中的值调用 flatMap2(b: TypeB, out: Collector[TypeOut]),则为键 b.bar 设置状态。