gpt4 book ai didi

java - Flink状态变量和普通类变量的区别

转载 作者:行者123 更新时间:2023-12-01 19:29:38 27 4
gpt4 key购买 nike

我无法理解 Apache Flink 中状态的使用。据我了解,状态在 Flink 程序执行期间维护变量值。我认为通过类变量可以实现同样的事情。

例如,如果我声明一个类变量“someCounter”并在某个Map函数中递增其值,那么“someCounter”值在代码执行过程中会被保留,那么为什么我们需要一个昂贵的状态来维护此链接的示例中提到的类似值:https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/state/state.html#tab_java_0

static class abc extends RichMapFunction<X,Y> {
long someCounter = 0;
//ctor
public abc() {};

@Override
public Y map(X x) throws Exception {
someCounter++;
if(someCounter > 1000)
someCounter = 0;
return someCounter;
}
}

最佳答案

故障恢复、重新部署和重新扩展是一些重大差异。

Flink 对其所管理的状态进行定期检查点。如果发生故障,您的作业可以使用最新的检查点自动恢复,并继续处理。您还可以手动触发状态快照(在本例中称为保存点)并使用它在重新部署后重新启动。在此过程中,您还可以向上或向下重新调整集群规模。

您还可以选择 Flink 状态所在的位置——要么作为堆上的对象,要么作为磁盘上的序列化字节。因此,有可能拥有比内存所能容纳的更多的状态。

从操作角度来看,这更像是将数据存储在数据库中,而不是存储在内存中。但从性能角度来看,它更像是使用变量:状态始终是本地的,具有高吞吐量和低延迟。

关于java - Flink状态变量和普通类变量的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60143785/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com