我有一个密钥流:

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来运行全状态功能,而这会导致不必要的费用:运行时出现新的子任务,以及重新整理数据?
  • 最佳答案

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

    参见示例here

    08-04 14:45