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 消费,它们将继续添加水印。)
本人初学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 消费,它们将继续添加水印。)