アッカ(20):ストリーム:非同期動作、-Asyncをバッファリング圧力、背圧およびバッファリングをバッチ処理

データ・フローは、アッカ・ストリーム原理上のプッシュ(プッシュモデル)の一種です。差分プッシュモデルとプルモデル傾向は、彼らが問題を解決することである:効率的なデータのためのプッシュモードが下流に流れる(高速下流加入者)、プルモデルが効率的上流(高速上流出版社)傾向があります。実際に下流希少の同じ速度で、上流と下流の速度は、データ損失の最終結果と一致していません。加入者は、出版社から下流のすべてのデータを受信できない場合は、関係なく、最終的にデータのオーバーフローの損失になりますどのくらいのバッファの、タイムリーに下流のプッシュません。下りデータのパブリッシャ上流満たす加入者の需要に間に合わないことができれば、失われた残業の下流結果として生じるの状態を読んでも、失われた下流の要求を行うための待ち時間が長くなります。データは、このプッシュのアッカ・ストリームモードをストリーミングするために、データの損失につながるデータを高速化するためのプッシュ、出版社が生成されたデータの速度を制御する方法を見つけることが必要です。下流部にアッカ・ストリームが完全に反応ストリーム仕様を達成しているので、それらの状態が制御される上りデータフローの下流アッカストリームで通知することができるアップストリームデータを受信することができるように、上流と下流の間で相互作用することが可能です圧力のいわゆるバッファ背圧。アッカストリームバッファは、データの伝送効率を向上させることができるように、バッチおよび格納された補足データバッファ背圧に使用しました。その後に非同期データストリームと並列動作は、上流下流の反応を無視した場合、さらに、データをバッファ促進することができ、その後、直ちに次のデータエレメントに続けます。不可欠で操作の非同期モードをバッファリングするようにします。アッカストリームバッファのサイズは、次の方法の非同期操作を使用して設定することができます。

1、設定ファイルのデフォルトのバッファを設定します。

 

2、ActorMaterializerSettingにおけるマクロレベルのセットで:

 

3、属性属性で設定。Atrributeもそう続けたプロパティの継承入力バッファ属性セットによって、階層的な関係を維持しているので: 

 

nestdSourceがMaterializerグローバル入力バッファプロパティを継承上記の例では、nestedSinkプロパティを書き換える; nestedFlowはnestedSink最初のセットを継承した後、それらの入力バッファのプロパティを書き換えます。AddAttribute私たちは、新しい属性を追加するために使用することができます。

 

これらの入力バッファは、主に背に使用される、開始値及び最大値を含む、上記で定義しました。それはデータのオーバーフロー背圧ないであろうが、それはデータ伝送効率の流れに影響を与えるので、そのため、理論的には、それは、バイト入力バッファ(初期= 1、最大値= 1)に設定することができます。従ってアッカストリームのデフォルトのバッファ長は16バイトです。だから、背圧の別名ストリームは、背圧をバッチ処理されます。

アッカ・ストリームは、プッシュモデルであるので、我々はまた、制御することができ、これらの上流のリンクがデータをプッシュソース、フローバッファが含ま:

 

データバッファはOverflowStrategyを使用することができる過剰オーバーフロー取り扱い戦略によって発行元の上流側に設けられています。デフォルトOverflowStrategy.backpressureを追加するための入力バッファ属性でトップ、他のOverflowStrategyのオプションは次の通りです:

 

アッカ・ストリームの外部システムとのデータ交換の必要性は問題を避けることができないとき、下流のデータ流量が一致しません。外部システムが反応ストリームの標準をサポートしていない場合、データの損失が発生します。これは、特定のソリューションを提供アッカは、ストリーム:外部システムである場合、高速データ生成上流conflate機能は、このような配列の下流のセットにデータを送信することができます。下流配列は、タイムリーな上りデータ要素を読み出す場合アイテム(項目)に押され、そうでなければ配列(I1、I2、I3···)は、再び上りデータ発生期間の下流読み取る表します。配列は無限の可能性があるので、データの損失を避けるために、理論的に可能です。ここでは、この関数の定義は次のとおりです。

 

次の例ではconflateWithSeed機能が使用されています。

 

低入力全体導管の速度を制御するために、上記の例では、ZipWith。その後、我々は、配列ZipWithの出力は遅延間隔消費データの長さを表していることがわかります。注:前述の3つの出力は、先読みアッカ・ストリームであるが引き起こされ、プリフェッチ遅延、していないようです。我々は入力バッファ(初期= 1、最大= 1)に設定したため、タイムリーな事前に消費するものとして理解すべき最初のデータ。

あなたが下流のタイムアウトが発生することがあり、リアクティブ・ストリームの標準的な外部システム上流の生産率が遅すぎる気付いていない場合は、アッカ・ストリームは、この問題を解決するための機能を拡張し提供します。

 

上流のデータ送信がタイムリー下流を要求することはできません場合は、我々は仮下りの要件を満たすように固定データ要素をプッシュする拡張することができます:

 

 

リリース6元記事 ウォン称賛43 ビュー570 000 +

おすすめ

転載: blog.csdn.net/hany3000/article/details/83620294