2016-11-15 26 views
0

ValueStateメンバーを使用するカスタムRichCoFlatMapFunctionがあります。ドキュメントはApache Flink:ConnectedStreamsのValueStateの範囲

を参照してください

キー/値のインタフェースは、現在の入力要素のキーにスコープされていることを言う

https://ci.apache.org/projects/flink/flink-docs-master/dev/state.html#using-the-keyvalue-state-interfaceどうかのこのような接続されたストリーム上のIキー:

val connected = streamA 
    .connect(streamB) 
    .keyBy(a=>a.foo, b=>b.bar) 
    .flatMap(new MyRichCoFlatMapFunction) 

セマンティクスはどのようにしてですか?それは2つの最初の、2番目の、または組み合わせにキーされていますか?

答えて

2

最初の引数keyBya => a.foo)は、最初のストリームのキー(streamA)を定義します。 2番目の引数(b => b.bar)は、2番目のストリームのキー(streamB)です。どちらの引数も同じ型のキーを返す必要があります。つまり、a.foob.barの型は同じでなければなりません。

接続オペレータは、同じオペレータに同じキーを持つstreamAstreamBのすべてのレコードを送信します。ステートフルRichCoFlatMapFunctionは、現在の要素のキーにValueStateを設定します。つまり、streamAの値にflatMap1(a: TypeA, out: Collector[TypeOut])が呼び出された場合は、a.fooの状態が設定され、streamBの値にflatMap2(b: TypeB, out: Collector[TypeOut])が呼び出されると状態が設定されますキーはb.barです。