Flink Kafka源代码中的并行性导致不执行任何操作 [英] Parallelism in flink kafka source causes nothing to execute
本文介绍了Flink Kafka源代码中的并行性导致不执行任何操作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是一个卡夫卡和闪烁的初学者。 我注意到一些令人不安的事情。当我将Kafka作业的并行度增加到任何大于1的值时,我没有窗口来执行它们的进程。我希望使用并行度来提高分析速度。
查看Apache Flink Web Dashboard中可视化问题的图像示例。 这是完全相同的代码和接收到的完全相同的数据集,区别仅是并行性。在第一个示例中,摄取的数据流经窗口函数,但是当并行度增加时,数据只是堆积在从不执行的第一个窗口函数中。它将永远保持这种状态,不会产生任何错误。
代码中使用的源是KafkaSource,FlinkKafkaConsumer似乎可以很好地使用相同的设置,但已弃用,所以我不希望使用它。
谢谢您的意见!
推荐答案
问题(几乎可以肯定),正在消费的kafka主题的分区比配置的并行度少。新KafkaSource
处理此情况的方式与FlinkKafkaConsumer
不同。
KafkaSource
运算符有10个实例时,其中一些实例没有接收任何数据,这些空闲实例保留了水印。基本上,Flink并不知道这些实例永远不会产生数据--相反,它在等待分配给它们要做的工作。
您可以通过执行以下操作之一来修复此问题:
- 将Flink的并行度降低到小于或等于Kafka分区数。
- 将
WatermarkStrategy
配置为使用withIdleness(duration)
,以便空闲实例将识别出它们没有执行任何操作,并(临时)将其自身从水印中移除。(如果为这些实例分配了要使用的拆分/分区,它们将继续进行水印操作。)
这篇关于Flink Kafka源代码中的并行性导致不执行任何操作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文