Kafka 分割槽和 Flink 並行
在 kafka 中,來自同一個使用者組的每個使用者都被分配了一個或多個分割槽。請注意,兩個使用者不可能從同一分割槽使用。flink 使用者的數量取決於 flink 並行度(預設為 1)。
有三種可能的情況:
-
kafka 分割槽== flink parallelism :這種情況很理想,因為每個消費者負責一個分割槽。如果你的訊息在分割槽之間保持平衡,則工作將在 flink 運算子之間均勻分佈;
-
kafka 分割槽<flink parallelism :一些 flink 例項不會收到任何訊息。為避免這種情況,你需要在任何操作之前在輸入流上呼叫
rebalance
,這會導致資料被重新分割槽:inputStream = env.addSource(new FlinkKafkaConsumer10("topic", new SimpleStringSchema(), properties)); inputStream .rebalance() .map(s -> "message" + s) .print();
-
kafka 分割槽> flink parallelism :在這種情況下,一些例項將處理多個分割槽。再一次,你可以使用
rebalance
在工作人員之間均勻地傳播訊息。