java - Flink 状态变量与普通类变量的区别
问题描述
我无法理解 Apache Flink 中状态的使用。据我了解,状态在 Flink 程序执行期间维护变量值。我认为同样的事情可以通过类变量来实现。
例如,如果我在某个 Map 函数中声明一个类变量“someCounter”并增加其值,那么在代码执行过程中会保留“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 状态所在的位置——作为堆上的对象,或者作为磁盘上的序列化字节。因此,有可能拥有比内存容量更多的状态。
从操作的角度来看,这更像是将数据保存在数据库中,而不是内存中。但从性能的角度来看,它更像是使用变量:状态始终是本地的,具有高吞吐量和低延迟。
推荐阅读
- python - 可视化相关数据热图的紧凑方式
- javascript - 如何使用javascript查找和替换几个标签中的单词?
- node.js - http://localhost:3003/register/registerObjectData/ 的 Http 失败响应:404 Not Found
- python - 避免在 numpy 和 mxnet 之间的数组转换期间复制
- excel - 带有字母数字数据的组合框上的运行时错误 13 类型不匹配
- html - 在循环中仅在对象下方显示一个复选框元素
- c# - 检查文件是否下载成功
- jsp - Kendo Grid:在 Kendo:column 中使用属性
- awk - 使用 AWK 基于一列获取 2 个制表符分隔文件的不常见行
- android - 自定义键盘上的字母键模糊,而特殊键超级清晰