Apache flink Flink表API和数据流处理函数

Apache flink Flink表API和数据流处理函数,apache-flink,flink-streaming,flink-table-api,Apache Flink,Flink Streaming,Flink Table Api,我想加入一个大的表,不可能包含在TM内存和流(kakfa)中。在我的测试中,我成功地加入了这两者,将TableAPI与datastream api混合在一起。我做了以下工作: val stream: DataStream[MyEvent] = env.addSource(...) stream .timeWindowAll(...) .trigger(...) .process(new ProcessAllWindowFunction[MyEvent, MyEvent, Tim

我想加入一个大的表,不可能包含在TM内存和流(kakfa)中。在我的测试中,我成功地加入了这两者,将TableAPI与datastream api混合在一起。我做了以下工作:

val stream: DataStream[MyEvent] = env.addSource(...)
stream
   .timeWindowAll(...)
   .trigger(...)
   .process(new ProcessAllWindowFunction[MyEvent, MyEvent, TimeWindow] {
        
        var tableEnv: StreamTableEnvironment = _
        
        override def open(parameters: Configuration): Unit = {
          //init table env
        }

        override def process(context: Context, elements: Iterable[MyEvent], out: Collector[MyEvent]): Unit = {
          val table = tableEnv.sqlQuery(...)
          elements.map(e => {
            //do process
            out.collect(...)
          })
        }
      })


它正在工作,但我从未在任何地方见过这种类型的实现。可以吗?缺点是什么?

不能在Flink函数中使用
StreamExecutionEnvironment
TableEnvironment
。环境用于构造提交到集群的管道

您的示例将作业提交到集群作业中的集群

这可能适用于某些用例,但通常不鼓励这样做。假设您的外部流包含数千个事件,并且您的函数将为每个事件创建一个作业,它可能会对您的集群造成DDoS攻击