作者:曹英傑
Flink 的網路協議棧是組成 flink-runtime 模塊的核心組件之一,是每個 Flink 作業的核心。它連接所有 TaskManager 的各個子任務(Subtask),因此,對於 Flink 作業的性能包括吞吐與延遲都至關重要。與 TaskManager 和 JobManager 之間通過基於 Akka 的 RPC 通信的控制通道不同,TaskManager 之間的網路協議棧依賴於更加底層的 Netty API。
本文將首先介紹 Flink 暴露給流運算元(Stream operator)的高層抽象,然後詳細介紹 Flink 網路協議棧的物理實現和各種優化、優化的效果以及 Flink 在吞吐量和延遲之間的權衡。
1.邏輯視圖
Flink 的網路協議棧為彼此通信的子任務提供以下邏輯視圖,例如在 A 通過 keyBy() 操作進行數據 Shuffle :