【问题标题】:Parallelism in flink kafka source causes nothing to executeflink kafka 源中的并行性导致不执行任何操作
【发布时间】:2022-01-02 20:20:54
【问题描述】:

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

查看来自 Apache Flink Web Dashboard 的图像示例,该示例将问题可视化。 这是完全相同的代码和完全相同的摄取数据集,区别仅在于并行度。在第一个示例中,摄取的数据流经窗口函数,但是当并行度增加时,数据只会堆积在第一个从不执行的窗口函数中。它永远保持这种状态,永远不会产生任何错误。

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

感谢您的任何想法!

【问题讨论】:

    标签: apache-kafka apache-flink flink-streaming


    【解决方案1】:

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

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

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

    • 将 Flink 的并行度降低到小于或等于 Kafka 分区数。
    • 将您的WatermarkStrategy 配置为使用withIdleness(duration),以便空闲实例能够识别它们没有做任何事情,并(暂时)将自己从水印中移除。 (如果这些实例被分配了要使用的拆分/分区,它们将继续进行水印处理。)

    【讨论】:

    • 就是这样。增加分区的数量立即解决了这个问题。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2011-06-27
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2020-07-30
    相关资源
    最近更新 更多