在运行时优雅地关闭Flink Kafka Comsumer

时间:2017-05-24 18:10:40

标签: apache-kafka apache-flink

我正在使用FlinkKafkaConsumer010与Flink 1.2.0,我面临的问题是:有没有办法可以关闭整个管道以编程方式如果出现某种情况?

可能的解决方案是我可以通过调用FlinkKafkaConsumer010中定义的 close()方法来关闭kafka使用者来源,然后关闭管道。对于这种方法,我创建了一个列表,其中包含我在kafka主题的管道开头创建的所有FlinkKafkaConsumer010实例的引用。然后在执行管道期间,我有另一个线程调用列表中每个FlinkKafkaConsumer010的 close()。我希望这应该关闭消费者,但结果是消费者仍然在运行。

有人可以对此有所了解或者给我一些关于如何在运行时以编程方式关闭flink管道的建议?

1 个答案:

答案 0 :(得分:2)

您尝试根据输入事件响应的方案是什么?如果是这样,我建议在管道中的某个地方安装一个MapFunction,并且当满足某些条件时,只是故意抛出异常以使作业失败。

另一种方法是查看isEndOfStream中的KeyedDeserializationSchema方法。基本上,当某个事件满足条件时,表示流已结束。

要考虑的另一个选择是让上面提到的MapFunction改为FlatMapFunction,它向外界发送信号事件。 Flink作业外部的单独进程会侦听该事件,并在收到时通过Flink CLI关闭Flink作业。