Flink表:维护配置表已更新

时间:2019-10-17 11:07:02

标签: java apache-flink flink-sql

我有一些配置可以用于Flink作业。

现在,我使用BroadcastedStreamKeyedBroadcastProcessFunction来做到这一点。

KeyedBroadcastProcessFunction将数据流(SingleOutputStreamOperator)和配置更新流(BroadcastedStream)作为输入。

  • 存储配置的MapState对象
  • 用于初始化配置的功能open()
  • 功能processElement(),用于融合来自具有当前配置的数据流中的消息,并将其发送到输出流中
  • 函数processBroadcastElement(),该函数使用配置更新流中的消息来更新存储的MapState

现在,我想使用Flink SQL API实现一些不同的东西。

我有多个不同的SQL查询,每个查询都取决于配置的当前状态。理想情况下,我想做这样的事情:

public void process(
    StreamTableEnvironment tableEnv, 
    BroadcastStream<ConfUpdateObject> broadcastedConfigs    // The broadcasted stream of configuration Update
    ){

    Table configurationTable = ???;                     // TODO : A Table that should store the configurations and be updated by broadcastedConfigs
    tableEnv.registerTable("Configuration", configurationTable);

    Table dataTable1 = ...;                             // For example table created from a Kafka source
    tableEnv.registerTable("Data1", dataTable1);

    String query1 = "SELECT * from Data1 JOIN Configuration ON ..."

    Table dataTable2 = ...;                             // For example table created from a Kafka source
    tableEnv.registerTable("Data2", dataTable2);

    String query2 = "SELECT * from Data2 JOIN Configuration ON ..."

    Table result1 = tableEnv.sqlQuery(query1);
    Table result2 = tableEnv.sqlQuery(query2);

    ... // Insert result1 and result2 in some sinks
}

是否可以通过任何方式做到这一点?

注意:

  • 输入数据都有一个rowtime字段
  • 配置没有任何时间戳记值
  • 如果需要,配置更新可以来自BroadcastStream以外的其他对象

0 个答案:

没有答案