Apache Flink:在KeyedStream的值上映射函数,而不会丢失键控状态

时间:2017-08-07 13:47:13

标签: apache-flink

我有一个键控流:

 KeyedStream<String, Data> keyed = 
        env.addSource(...)
           .map(new Parser())
           .keyBy(i -> i.key)

我想在我的流上运行状态完整的进程函数;但是process会返回正常的非键控流,导致丢失KeyedStream并强制我再次拨打keyBy

SingleOutputStreamOperator<Data> unkeyed = keyed.process(new Function)
KeyedStream<String, Data> keyedAgain = keyed.keyBy(i -> i.key)
  • 有没有办法在KeyedStream的值上调用地图函数?

  • 如何在不使用像ProcessFunction这样导致不必要成本的低级API的情况下运行状态完整函数:运行时新的子任务,再加上我的数据重新加载?

1 个答案:

答案 0 :(得分:2)

您可以使用RichMapFunctionRichFlatmapFunction,并可以访问Flink的托管状态机制。与ProcessFunction相比,您将失踪的是计时器。

请参阅示例here