flink kafka source 中的并行性不会导致任何执行

Parallelism in flink kafka source causes nothing to execute

本人初学kafka,flink爱好者。 我注意到了一些令人不安的事情。当我将 kafka 作业的并行度增加到超过 1 时,我没有 windows 来执行它们的进程。我希望使用并行来提高分析速度。

查看 Apache Flink Web Dashboard 中的图像示例,其中可视化了该问题。 这是完全相同的代码和完全相同的摄取数据集,不同之处在于仅并行性。在第一个示例中,摄取的数据流经 window 函数,但是当并行度增加时,数据只是堆积在第一个永远不会执行的 window 函数中。它永远保持这样,永远不会产生任何错误。

代码中使用的源是 KafkaSource,FlinkKafkaConsumer 似乎可以在相同的设置下正常工作,但已被弃用,因此我不希望使用它。

感谢任何想法!

正在使用的 Kafka 主题的分区数少于配置的并行度的问题(几乎可以肯定)。新的 KafkaSource 处理这种情况的方式不同于 FlinkKafkaConsumer

事件时间 window 等待水印的到来,指示流现在已完成 window 的结束时间。当您的 KafkaSource 运算符有 10 个实例时,其中一些实例未接收任何数据,这些空闲实例会阻止水印。基本上,Flink 不知道这些实例不会产生数据——而是等待它们被分配工作。

您可以通过执行以下操作之一解决此问题:

  • 将Flink的并行度降低到小于等于Kafka分区数
  • 将您的 WatermarkStrategy 配置为使用 withIdleness(duration),这样空闲的实例就会意识到它们没有做任何事情,并且(暂时)将它们自己从水印中移除。 (如果这些实例被分配 splits/partitions 消费,它们将继续添加水印。)