簡體   English   中英

在任務管理器之間均勻分布 Flink 操作符

[英]Distribute a Flink operator evenly across taskmanagers

我正在 15 台機器的裸機集群上對 Flink 流應用程序進行原型設計。 我正在使用帶有 90 個任務槽 (15x6) 的紗線模式。

該應用程序從單個 Kafka 主題讀取數據。 Kafka 主題有 15 個分區,因此我將源操作符的並行度也設置為 15。 但是,我發現 Flink 在某些情況下會將消費者任務的 2-4 個實例分配給同一個任務管理器。 這會導致某些節點受網絡限制(Kafka 主題正在提供大量數據,而機器只有 1G 網卡)和整個數據流的瓶頸。

有沒有辦法“強制”或以其他方式指示 Flink 在所有任務管理器(也許是循環法)之間平均分配任務? 如果沒有,有沒有辦法手動將任務分配給特定的任務管理器插槽?

據我所知,這是不可能的。 將任務安排到任務槽中的作業管理器只知道任務槽。 它不知道某些任務槽屬於一個任務管理器,而另一些則屬於另一個任務管理器。

Flink 不允許手動分配任務槽,因為在故障處理的情況下,它可以將任務分配給剩余的任務管理器。

但是,您可以通過在flink-conf.yaml設置cluster.evenly-spread-out-slots: true來均勻分配工作負載。 這適用於 Flink >= 1.9.2。

要使其工作,您可能還必須設置:
taskmanager.numberOfTaskSlots等於每台機器的可用 CPU 數量,以及
parallelism.default等於集群中的 CPU 總數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM