调用过程函数时,静态关键字是否有特定于Flink的优化



描述:

流程功能的美妙之处在于,它们使我们能够访问键控状态和计时器,从而使开发人员能够完全控制输入流中接收到的每个事件。它们工作得很好,几乎解决了我所有的用例。那我为什么在这里打扰你?公平的问题我很好奇,使用处理器的静态实现与使用新关键字相比,是否有任何潜在的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并没有什么好处,因为在任何一种情况下都只能创建其中一个。

相关内容

  • 没有找到相关文章

最新更新