2016-06-16 4 views
3

からのデータを使用してストリームを豊かに、私はイベントの無限ストリームを豊かにしたいです。ストリーム自体は、Idのハッシングによって並列化されます。イベントごとに、外部ソース(REST、DBなど)への呼び出しがある可能性があります。この呼び出しは性質上ブロックされています。 1つのストリームパーティション内のイベントの順序を維持する必要があります。ApacheのFLINK:私のアプリケーションでは、外部/着信拒否

私の考えでは、接続して、各イベントのポーリングし、外部ソースを設定RichMapFunctionを作成することでした。ブロッキングコールは通常長くかかりませんが、最悪の場合、サービスが停止する可能性があります。

理論的には、これは動作しますが、私はあなたがストリーム内のいくつかのブロック操作を持っている場合FLINKはどのように反応するか分からないように私は、このようにそれをやって良い感じはありません。多くの並列ストリームがブロックされている場合、つまりスレッドが不足している場合はどうなりますか?または、ストリームが並列化されている時点で、ビヘイビアがストリーム上向きにどのように上向きになっていますか?

は、他の誰かがそれに取り組むためにどのように同様の問題と私の質問への答えやいくつかのアイデアを持っていることがありますか?

+1

スレッド不足を実行しません。あなたがブロックを載せた場合、オペレータは、進歩を遂げることができない、したがって、背圧は、ソース演算子を減速最後に適用されます。 –

+0

答えをありがとう。そのようなデータの豊富化が正しいアプローチであれば、私の心配はもっと重要でした。 – peedeeX21

+2

答えにくいです。私はあなたがスループットのペナルティを支払うと仮定し、Flinkはそのような使用例のために決して設計されませんでした。 - Flinkはブロックするならば、できるだけ処理を切り離すので高いスループットを可能にします。しかし、私はあなたがそれによってシステムを "壊す"ことは疑います。 –

答えて

2

RichMapFunctionは良い出発点ですが、あなたの処理をブロックしない非同期とこれはどのRichAsyncFunctionを好みます!

慎重に:
1 - あなたのDBアクセスだけでなく、あなたのイベントの順序は、(使用モードに応じて)

詳細を変更することがあり
2 - 非同期:https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/stream/asyncio.html

はそれが

を役に立てば幸い
関連する問題