簡體   English   中英

Kafka stream 如何在 Flink 中的 TaskManager 之間分配?

[英]How does Kafka stream get distributed among TaskManagers in Flink?

假設一個 Flink 作業(三個任務管理器tm1tm2tm3 )使用 Kafka 主題作為源,那么 stream 是如何在它們之間分配的? 誰做分配?

這是在FlinkKafkaConsumerBaseopen()方法中完成的。 Flink 運行時上下文提供了方法,每個實例可以使用這些方法來確定 Flink Kafka 消費者的並行實例總數,以及特定實例的索引。 每個實例都使用這些方法獨立地負責讀取特定分區。

除了大衛寫的內容之外,您還應該記住一件事:最大值。 KafkaProducer 的並行性受分區數量的限制。 由於 Flink 將從第一個插槽(第一個任務管理器)開始分配任務,然后 go 在第二個等上,並為每個源重復此操作,如果您的任務管理器數量超過主題分區。

在您有許多 kafka 源和少量主題分區的情況下,這種不平衡變得越來越明顯。 在極端情況下,您有許多只有一個分區的源,所有這些源都將被第一個插槽/任務管理器消耗。 如果您使用Slot 共享組,您可以解決這種極端情況。 這當然是一個邊緣案例,但在定義資源和工作流程時,最好記住這一點。

暫無
暫無

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

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