本文为您介绍在使用企业级状态后端存储GeminiStateBackend时,可能会用到的一些调优参数。
背景信息
在大部分场景下,基于自适应调参功能,GeminiStateBackend会自动调整参数而不需要您手动配置。您只需要根据业务场景,调整一些基本配置,详情参见基本配置。在遇到特定场景时,您可以开启一些配置来进行针对性的调优。例如:
在希望协调内存资源和性能时,请使用内存配置,详情请参见内存配置。
在遇到本地盘空间不足的问题时,请使用存算分离配置,详情请参见存算分离配置。
在遇到Join算子有性能瓶颈时,请使用KV分离配置,详情请参见KV分离配置。
企业级状态后端存储的整体介绍和配置方法,详情请参见企业级状态后端存储介绍和设置State相关参数。
基本配置
参数 | 说明 | 数据类型 | 默认值 | 备注 |
table.exec.state.ttl | SQL作业的State TTL(Time To Live)。 | Long |
| 单位为毫秒,例如设置为129600000,则表示过期时间为1.5天。不可与state.backend.gemini.ttl.ms共同使用。 说明 推荐您根据业务需求,设置一个较短的值。 |
state.backend.gemini.ttl.ms | DataStream或python作业的State TTL(Time To Live)。 | Long | (none) | 单位为毫秒,例如设置为129600000,则表示过期时间为1.5天。不可与table.exec.state.ttl共同使用。 说明 推荐您根据业务需求,设置一个较短的值。 |
state.backend.gemini.savepoint.external-sort.local-storage.enabled | 标准作业快照过程中产生的临时数据是否储存在本地磁盘。 | Boolean | false | 取值如下:
说明
|
内存配置
以下内存配置参数支持版本是VVR 4.0及以上版本。
参数 | 说明 | 数据类型 | 默认值 | 备注 |
state.backend.gemini.memory.managed | GeminiStateBackend是否自动根据Managed Memory来分配内存。 | Boolean | true | 参数取值如下:
说明
|
state.backend.gemini.total.writebuffer.size | WriteBuffer占用的内存总大小。 | String | 128 MB | 在state.backend.gemini.memory.managed参数值为false时生效,否则WriteBuffer占用的内存总大小将由Managed Memory自动计算。 配置该参数值时,需要明确增加单位后缀,单位为B、KB、MB和GB。 说明
|
state.backend.gemini.offheap.size | GeminiStateBackend使用的堆外内存的大小。 说明 Gemini使用的这部分堆外内存不包括WriteBuffer使用的部分。 | String | (none) | 在state.backend.gemini.memory.managed参数值为false时生效,否则GeminiStateBackend使用的堆外内存的大小将由Managed Memory自动计算。 配置该参数值时,需要明确增加单位后缀,单位为B、KB、MB和GB。 说明
|
Apache Flink中Checkpoint和StateBackend的基础配置同样适用于GeminiStateBackend,详情请参见Checkpoints and State Backends。
存算分离配置
以下存算分离配置参数支持版本是VVR 4.0.11及以上版本。
参数 | 说明 | 数据类型 | 默认值 | 备注 |
state.backend.gemini.file.cache.type | 存算分离的模式。 | String |
| 参数取值如下:
|
state.backend.gemini.file.cache.preserved-space | 单个TaskManager上剩余的State数据可用磁盘空间。 | String | 2 GB | 当实际可用空间小于该值时,GeminiStateBackend将把State数据存储到DFS中,以摆脱本地存储规格的限制。 配置该参数值时,需要明确增加单位后缀,单位为B、KB、MB和GB。 说明
|
在使用OSS作为分布式文件系统时,可能会发生意料外的磁盘空间占用情况,这是由于OSS Client SDK会将文件先完整写到本地磁盘,再进行上传。而Flink在执行Savepoint时,单个StateBackend仅会产生一个文件,这就导致了创建Savepoint时,本地会创建一个很大体积的未压缩文件,会导致意料外的磁盘空间占用。目前在这种情况下存算分离并不能起到作用,需要使用扩大并发数量等手段减少单节点的State大小。
KV分离配置
以下KV分离配置参数支持版本是VVR 4.0.12及以上版本。
参数 | 说明 | 数据类型 | 默认值 | 备注 |
state.backend.gemini.kv.separate.mode | KV分离的模式。 | String |
| 参数取值如下:
说明
|
state.backend.gemini.kv.separate.value.size.threshold | 在启用KV分离后,触发KV分离的Value大小阈值。 | Integer | 200 | 在达到该阈值后的Record会将Key和Value分离存储。建议取值范围为150~1000,可以根据Join成功率调整该参数,Join成功率越高,该参数可以设置得越大。 单位为字节(Bytes)。 说明 在实时计算引擎VVR 6.0.1及以上版本,如果您已开启自适应调参模式,则引擎内部会根据数据特点动态调整该参数,无需您显式配置。 |
自适应调参配置
以下自适应调参配置参数支持版本是VVR 4.0.12及以上版本。
参数 | 说明 | 数据类型 | 默认值 | 备注 |
state.backend.gemini.auto-tune.mode | 自适应调参的模式。 | String | ACTIVE | 参数取值如下:
说明
|
state.backend.gemini.auto-tune.burst.start.x | 自适应调参下采用性能优先模式的时间段。 | String | (none) | 参数名称中的x为任意数字,start.x与end.x对应,可以借此来设置多个时间段。参数值的格式为yyyy-MM-dd HH:mm:ss。 当您更关注TPS而非综合效能时,可以配置这两个参数,GeminiStateBackend将在该时间段采用TPS优先的策略,以耗费更多的资源(CPU或MEM)为代价,达到更高的TPS。 说明
|
state.backend.gemini.auto-tune.burst.end.x |