Cae*_*sar 6 apache-flink flink-streaming
Flink 有一个MemoryStateBackend和一个FsStateBackend(和一个RocksDBStateBackend)。两者似乎都扩展了HeapKeyedStateBackend,即存储当前工作状态的机制完全相同。
这个SO answer说主要区别在于在MemoryStateBackendJobManagers 内存中保留检查点的副本。(我无法从源代码中收集到任何证据。)这MemoryStateBackend也限制了每个子任务的最大状态大小。
现在我想知道:你为什么要使用MemoryStateBackend?
正如您所说,MemoryStateBackend和FSStateBackend都基于HeapKeyedStateBackend. 这意味着,两个状态后端都将操作符的状态作为 TaskManager 的 JVM 堆上的常规对象进行维护,即状态始终在内存中访问。
后端的不同之处在于它们如何为检查点保留状态。检查点是存储在某处的应用程序的所有操作员的状态的副本。如果出现故障,应用程序将重新启动,并且操作员的状态从检查点初始化。
在FSStateBackend存储检查点在文件系统中,通常是HDFS,S3,或者被安装所有工作者节点上的NFS。将MemoryStateBackend存储在JobManager的JVM状态。这有以下优点和缺点:
优点:
缺点:
由于如果 JM 出现故障,检查点就会丢失,因此MemoryStateBackend它不适用于大多数生产用例。它对于开发和测试有状态应用程序非常有用,因为它不需要配置或设置。
| 归档时间: |
|
| 查看次数: |
713 次 |
| 最近记录: |