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 在工作人员之间均匀地传播消息。