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