FLINKタスクのパフォーマンスの最適化

タスクのパフォーマンスを向上させる方法FLINK

A、オペレータチェーン

より効率的に分散実行するために、FLINKは可能タスク、スレッド内の各タスクの実行を形成するために一緒にサブタスクリンク(鎖)のオペレータであろう。リンク最適化タスクのオペレータは、非常に効率的である。これは、遅延が大きくなる全体のスループットを低減しつつ、メッセージ/デシリアライゼーションのシーケンスは、交換データバッファを削減低減、スレッド間の切り替え減少します。

FLINK JobGraph相はスレッド間の切り替えのオーバーヘッドを低減するために、実行およびバッファリングされ最適化オペレータチェーン演算子(オペレータチェーン)タスク(スレッド)を挿入するために最適化されたコードを生成する、改善するために全体のスループットとレイテンシ。次の例では、公式サイトを説明します。

ソース、上記の図、地図、[keyBy |ウィンドウ|適用]、シンクオペレータ並列はAとして、最適化FLINK、ソースマップ及びオペレータフォームチェーンオペレータの後、2,2,2,1であります図の図に示されているスレッド上で実行しているタスクは、図に示すように、平行並列ビューをビューを凝縮しました。あなたは以下の条件が満たされているかどうかを確認オペレータチェーン間の子供をカウントアップすることができます:

下流オペレータが一致でLの並列。

下流ノードのLは1です。

下流ノード上のLは、同じスロットグループです。

戦略L鎖は常に下流のノードです。

Lポリシーチェーン上流ノードまたはHEADは常に。

2つのノード間のLは、前方を分割データです。

リットルのユーザーは、チェーンを無効にしません。

二、スロットの共有

スロット共有は同じで、ジョブを参照し、同じslotSharingGroup(デフォルト:デフォルト)が異なるタスクサブタスク名の間にはスロットが上であるパイプライン全体のジョブを保持する機会を持っていますスロットを、共有することができますデフォルトのslotSharingの理由で述べた条件の下で最大の平行度のスロットオペレータとジョブの数が仕事を開始する必要等しいです。さらにスロット共有メカニズムジョブの運転性能によって改善することができ、並列処理タスクの最大の度合いとリソースの消費量が異なるTM上に分布していること窓に非常に類似したオペレータは、ケースのスロット番号そのままで設定することができる並列処理の最大の度合いを増加し、マップのように、同時に、この比較的単純な操作は、排他的なスロットリソースではありませんフィルタリングし、資源の浪費の可能性を減らします。

ソースマップを含む図[6並列]、keyBy /窓/適用[6並列]、シンク6つのスロットの総数に占める[1つの並列]三種類のタスク、;左から最初の内部スロット3走行右開始サブタスク[3スレッド]、完全パイプラインジョブを保持し、そして残りの5つは、スロット2サブタスク[2スレッド]を実行しているが、データは、最終的にシンクデータ処理を完了するために、ネットワークを介して送信されます。

三、FLINK非同期IO

フロー計算は、多くの場合、外部システムと対話する必要があり、多くの場合、あなたは高い接続が時間のかかる通信を待つことになる得ることを、単一の接続が占めています。以下は、2つの方法で比較例です。

図褐色バーが長い待ち時間を表し、ネットワークの待ち時間が大幅に見出さスループットと遅延を妨げられることができます。同期アクセスの問題を解決するために、非同期モードでは、同時に複数の要求と応答を処理することができます。それはあなたが等、データベースのユーザA、B、Cに連続的にそれによって、図で説明したように、連続する要求の間のブロッキングを待つ必要がなくなり、プロセスに戻さ返信に応答することが要求されると同時に要求を、送信することができる、です。右に示します。これはまさに、原則非同期I / Oのの実現です。

四、Checkpoint 优化

Flink 实现了一套强大的 checkpoint 机制,使它在获取高吞吐量性能的同时,也能保证 Exactly Once 级别的快速恢复。

首先提升各节点 checkpoint 的性能考虑的就是存储引擎的执行效率。Flink官方支持的三种 checkpoint state 存储方案中,Memory 仅用于调试级别,无法做故障后的数据恢复。其次还有 Hdfs 与 Rocksdb,当所做 Checkpoint 的数据大小较大时,可以考虑采用 Rocksdb 来作为 checkpoint 的存储以提升效率。

其次的思路是资源设置,我们都知道 checkpoint 机制是在每个 task 上都会进行,那么当总的状态数据大小不变的情况下,如何分配减少单个 task 所分的 checkpoint 数据变成了提升 checkpoint 执行效率的关键。

最后,增量快照。非增量快照下,每次 checkpoint 都包含了作业所有状态数据。而大部分场景下,前后 checkpoint 里,数据发生变更的部分相对很少,所以设置增量 checkpoint,仅会对上次 checkpoint 和本次 checkpoint 之间状态的差异进行存储计算,减少了 checkpoint 的耗时。

总结

Operator Chain 是将多个 Operator 链接在一起放置在一个 Task 中,只针对 Operator。Slot Sharing 是在一个 Slot 中执行多个 Task,针对的是 Operator Chain 之后的 Task。这两种优化都充分利用了计算资源,减少了不必要的开销,提升了 Job 的运行性能。异步IO能解决需要高效访问其他系统的问题,提升任务执行的性能。Checkpoint优化是集群配置上的优化,提升集群本身的处理能力。

 

参考:

https://www.infoq.cn/article/ZmL7TCcEchvANY-9jG1H

https://blog.icocoro.me/2019/06/10/1906-apache-flink-asyncio/

 

おすすめ

転載: www.cnblogs.com/luxiaoxun/p/12114728.html