Flink SQL中的控制流

时间:2018-03-23 05:02:53

标签: apache-flink flink-streaming flink-sql

使用流API,我可以编写一个接受控制流和数据流的RichCoFlatMapFunction,控制流包含用于启动或停止或更改计算参数的元素,我知道我可以存储当前的控制设置状态,并在处理数据流时检查值。

但是用Flink SQL做类似事情的方法是什么? 我不能使用join作为数据流,控制流也无法连接在一起。

我们提出的解决方案是按应用程序本身存储控件设置。 这个想法是:

  1. 将控制流广播到地图运算符,并将控件设置存储到其map()方法中的java单例对象中,因为地图运算符将以默认并行度运行, 我们假设它将在该作业的所有JVM上运行,这样我们就可以确保每个JVM都会初始化并不断更新单例对象中的控件设置。

  2. 使用SQL,我们可以通过访问java单例对象来访问每个UDAF或UDF。

  3. 但我不确定我的假设是否正确,这是一个可行的解决方案。

1 个答案:

答案 0 :(得分:1)

我认为这不是一个好主意。 SQL不是为这种用例而设计的。而是根据指定优化和执行SQL查询。不打算更改查询的行为。除了设计视角,它也不会表现良好,因为您需要对您处理的每个记录进行远程状态查找以分布可查询状态。这增加了当然的延迟。

对我而言,您的用例听起来更像是一个应用程序,而不是SQL查询。为此,DataStream API将是正确的选择。您可以做的是将SQL(或Table API)查询嵌入到应用程序中,即使用SQL进行前处理和后处理,并在中间使用控制/数据流模式的运算符。