我有一个键控流:
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
上的值调用映射函数?如何在不使用低级 API 的情况下运行状态完整的函数,例如
ProcessFunction
会导致不必要的成本:运行时的新子任务,以及重新洗牌数据?
您可以使用RichMapFunction
或RichFlatmapFunction
并访问 Flink 的托管状态机制。与ProcessFunction
相比,您将缺少的是计时器。
请参阅此处的示例。