
# 配置Flink作业状态后端冷热数据分离存储
本章节适用于MRS 3.3.0及以后版本。
在宽表关联计算场景中，每张表字段较多，Flink作业的状态数据量随字段数量和窗口时长线性增长。当状态数据量超过RocksDB内存缓存容量时，数据被频繁写入磁盘，导致状态后端数据量较大，严重影响状态后端性能。Flink提供了状态后端冷热分级存储功能，将频繁访问的热数据存储在RocksDB本地磁盘上，将不常访问的冷数据迁移到HBase中存储，从而减轻本地存储压力，提升热数据的访问性能。本章节介绍如何开启状态后端冷热分级存储功能。
#### 开启状态后端冷热分级存储功能步骤
1. 安装包含Flink、HBase等服务的客户端，安装路径如：/opt/hadoopclient。
2. 以客户端安装用户登录安装客户端的节点，复制HBase的"/opt/client/HBase/hbase/conf/"目录下的所有配置文件至部署FlinkServer的所有节点的一个空目录，如"/tmp/client/HBase/hbase/conf/"。
   
   修改FlinkServer节点上面配置文件目录及其上层目录属主为omm。
   ```
   chown omm: /tmp/client/HBase/ -R
   ```
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - FlinkServer节点： 登录Manager，选择"集群 \> 服务 \> Flink \> 实例"，查看FlinkServer所在的"业务IP"。
     
   
   - 如果FlinkServer实例所在节点与包含HBase服务客户端的安装节点相同，则该节点不执行此步骤。
    
   
   
3. 登录Manager，选择"集群 \> 服务 \> Flink \> 配置 \> 全部配置"，搜索"HBASE_CONF_DIR"参数，在该参数的"值"中填写[2]中复制了HBase配置文件的FlinkServer的目录，如"/tmp/client/HBase/hbase/conf/"。
4. 填写完成后单击"保存"，确认修改配置后单击"确定"。
5. 单击"实例"，勾选所有FlinkServer实例，选择"更多 \> 重启实例"，输入密码，单击"确定"重启实例。
6. 使用具有FlinkServer管理员权限的用户登录FusionInsight Manager。
7. 选择"集群 \> 服务 \> Flink"，在"Flink WebUI"右侧，单击链接，访问Flink的WebUI。
8. 单击"作业管理"进入作业管理页面。
9. 找到待调优的并处于非运行中的作业，在"操作"列单击"开发"进入作业开发界面。
10. 在作业开发界面的"自定义参数"项中，根据实际需求添加如下参数并保存，热数据（常用及使用中数据）可参考[表1]，冷数据（不常用、较长时间未使用的数据）可参考[表2]。
    
     表1RocksDB状态后端存储 
    | 参数名称                                          | 参数说明                                                                                                                                                                                                                                                                                                                                                | 取值示例    |
    |:---|:---|:---|
    | table.exec.state.cold.enabled                 | 是否开启冷热分离的RocksDB。 - false（默认值）：关闭。  - true：开启。                                                                                                   | false   |
    | state.backend.rocksdb.cold.localdir           | 冷数据的存储目录。                                                                                                                                                                                                                                                                                                                                           | -       |
    | state.backend.rocksdb.cold.predefined-options | 冷数据 RocksDB的预定义配置： - DEFAULT（默认值）：不强制RocksDB写磁盘，建议配置为当前值。  - SPINNING_DISK_OPTIMIZED_HIGH_MEM：预置优化RocksDB写磁盘参数，由于Flink不依赖RocksDB数据恢复作业，所以不建议使用当前配置。   | DEFAULT |
    | state.backend                                 | 状态后端存储介质，建议"rocksdb"。                                                                                                                                                                                                                                                                                                                               | rocksdb |
       
     表2HBase作为冷数据二级状态后端存储 
    | 参数名称                                 | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                         | 取值示例                                                        |
    |:---|:---|:---|
    | table.exec.state.cold.enabled        | 是否开启冷热分级存储。 - false（默认值）：关闭。  - true：开启。                                                                                                                                                                                                     | false                                                       |
    | state.backend.cold                   | 指定冷数据状态后端存储，当前仅支持"hbase"。                                                                                                                                                                                                                                                                                                                                                                                                                    | hbase                                                       |
    | table.exec.state.ttl                 | 数据状态变化的超时时间。 - table.exec.state.cold.enabled为true时：表示热数据的超期时间，超过该值热数据将成为冷数据。  - table.exec.state.cold.enabled为false时：表示所有数据的超期时间，超过该值数据将被清理。  - 默认值：0，表示数据永不过期。   | 0                                                           |
    | state.backend.hbase.zookeeper.quorum | 访问HBase使用的ZooKeeper的连接地址，格式：*ZooKeeper的quorumpeer实例业务IP:ZooKeeper客户端端口号,ZooKeeper的quorumpeer实例业务IP:ZooKeeper客户端端口号,ZooKeeper的quorumpeer实例业务IP:ZooKeeper客户端端口号*                                                                                                                                                                                                                                                                               | 192.168.10.10:24002,192.168.10.11:24002,192.168.10.12:24002 |
    | state.backend                        | 状态后端存储介质，建议"rocksdb"。                                                                                                                                                                                                                                                                                                                                                                                                                        | rocksdb                                                     |
       
    ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
    - ZooKeeper的quorumpeer实例业务IP： ZooKeeper服务所有quorumpeer实例业务IP。登录FusionInsight Manager，选择"集群 \> 服务 \> ZooKeeper \> 实例"，可查看所有quorumpeer实例所在主机业务IP地址。
      
    
    - ZooKeeper客户端端口号： 登录FusionInsight Manager，选择"集群 \> 服务 \> ZooKeeper"，在"配置"页签查看"clientPort"的值。
      
     
    
    
 
#### 相关文档
- 如何在FlinkServer中创建Flink SQL作业：[集群连接模式创建Flink SQL作业](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_24024.html)。
- 介绍多流Join场景下通过Hint配置表级别TTL的方法，可与冷热分离配合使用：[多流Join场景支持配置表级别的TTL时间](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_249151.html)。
- FlinkServer作业引擎的整体架构和关键能力：[FlinkServer作业引擎概述](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_24016.html)。
- Flink客户端的安装和使用方法：[Flink客户端使用实践](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_0473.html)。
 
