描述:
流程功能的美妙之处在于,它们使我们能够访问键控状态和计时器,从而使开发人员能够完全控制输入流中接收到的每个事件。它们工作得很好,几乎解决了我所有的用例。那我为什么在这里打扰你?公平的问题我很好奇,使用处理器的静态实现与使用新关键字相比,是否有任何潜在的Flink性能优化
示例:
将静态过程函数应用于键控流
private static final CountWithTimeoutFunction TIMEOUT_COUNT_PROCESSOR = new CountWithTimeoutFunction();
// apply the process function onto a keyed stream
DataStream<Tuple2<String, Long>> result = stream
.keyBy(0)
.process(TIMEOUT_COUNT_PROCESSOR);
将非静态过程函数应用于键控流
// apply the process function onto a keyed stream
DataStream<Tuple2<String, Long>> result = stream
.keyBy(0)
.process(new CountWithTimeoutFunction());
不,没有优化。在这两种情况下,首先构建工作流图,然后将其序列化/分发给任务管理器,然后进行反序列化并开始执行。因此,在构建工作流图时,对函数使用singleton并没有什么好处,因为在任何一种情况下都只能创建其中一个。