【问题标题】:Difference between Flink state and ordinary class variablesFlink 状态变量与普通类变量的区别
【发布时间】:2020-02-10 03:40:19
【问题描述】:

我无法理解 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;
    }
}

【问题讨论】:

    标签: java variables streaming state apache-flink


    【解决方案1】:

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

    Flink 会定期检查它所管理的状态。如果发生故障,您的作业可以使用最新的检查点自动恢复,并恢复处理。您还可以手动触发状态快照(在本例中称为保存点)并在重新部署后使用它重新启动。当您使用它时,您还可以向上或向下重新缩放集群。

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

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

    【讨论】:

    • 除了 David 写的内容之外,ValueState 的范围是键,而常规字段的范围是运算符实例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 2019-11-17
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多