apache-flink 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();
    
  1. kafka分区> flink parallelism :在这种情况下,一些实例将处理多个分区。再次,您可以使用rebalance在工作人员之间均匀地传播消息。