Kafka 分割槽和 Flink 並行

在 kafka 中,來自同一個使用者組的每個使用者都被分配了一個或多個分割槽。請注意,兩個使用者不可能從同一分割槽使用。flink 使用者的數量取決於 flink 並行度(預設為 1)。

有三種可能的情況:

  1. kafka 分割槽== flink parallelism :這種情況很理想,因為每個消費者負責一個分割槽。如果你的訊息在分割槽之間保持平衡,則工作將在 flink 運算子之間均勻分佈;

  2. kafka 分割槽<flink parallelism :一些 flink 例項不會收到任何訊息。為避免這種情況,你需要在任何操作之前在輸入流上呼叫 rebalance ,這會導致資料被重新分割槽:

    inputStream = env.addSource(new FlinkKafkaConsumer10("topic", new SimpleStringSchema(), properties));
    
    inputStream
        .rebalance()
        .map(s -> "message" + s)
        .print();
    
  3. kafka 分割槽> flink parallelism :在這種情況下,一些例項將處理多個分割槽。再一次,你可以使用 rebalance 在工作人員之間均勻地傳播訊息。