企业级状态后端存储配置

本文为您介绍在使用企业级状态后端存储GeminiStateBackend时,可能会用到的一些调优参数。

背景信息

在大部分场景下,基于自适应调参功能,GeminiStateBackend会自动调整参数而不需要您手动配置。您只需要根据业务场景,调整一些基本配置,详情参见基本配置。在遇到特定场景时,您可以开启一些配置来进行针对性的调优。例如:

  • 在希望协调内存资源和性能时,请使用内存配置,详情请参见内存配置

  • 在遇到本地盘空间不足的问题时,请使用存算分离配置,详情请参见存算分离配置

  • 在遇到Join算子有性能瓶颈时,请使用KV分离配置,详情请参见KV分离配置

说明

企业级状态后端存储的整体介绍和配置方法,详情请参见企业级状态后端存储介绍设置State相关参数

基本配置

参数

说明

数据类型

默认值

备注

table.exec.state.ttl

SQL作业的State TTL(Time To Live)。

Long

  • 实时计算引擎VVR 4.0.12及以上版本:默认值为1.5天。

  • 实时计算引擎VVR 4.0.12以下版本:默认值为空,代表State不过期。

单位为毫秒,例如设置为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

取值如下:

  • false(默认值):临时数据储存在DFS上。

  • true:临时数据储存在本地磁盘,从而减少与DFS的交互,加快创建作业快照速度。如果您的本地磁盘空间足够存放临时数据,即本地磁盘空间使用率在30%以下,建议设置该参数为true。

说明
  • 仅实时计算引擎VVR 4.0及以上版本支持该参数。

  • 在标准快照执行较慢时,建议您考虑启用该参数。

内存配置

说明

以下内存配置参数支持版本是VVR 4.0及以上版本。

参数

说明

数据类型

默认值

备注

state.backend.gemini.memory.managed

GeminiStateBackend是否自动根据Managed Memory来分配内存。

Boolean

true

参数取值如下:

  • true:系统将自动根据Managed Memory和task slot数计算每个Backend的内存。

  • false:每个Backend的内存大小将设置为state.backend.gemini.total.writebuffer.sizestate.backend.gemini.offheap.size参数值的和。

    您可以通过将该参数取值设置为false,并单独配置WriteBuffer和Offheap的大小来协调内存资源和性能。

说明
  • 推荐您保持参数默认值,不用修改。

  • 实时计算引擎VVR 4.0.12版本及以上版本,该参数默认值为true;实时计算引擎VVR 4.0.12以下版本,该参数默认值为false。

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

  • VVR 4.0.11版本:INFINITE

  • VVR 4.0.12及以上版本:LIMITED

参数取值如下:

  • INFINITE:不打开存算分离,State数据只存在本地。

  • LIMITED:State数据首先存储到本地,在超过本地磁盘限制时,存储State数据到DFS中。

    当遇到因状态数据过大造成本地盘空间不足的问题时,可以将该参数取值设置为LIMITED,同时根据本地磁盘限制情况,设置state.backend.gemini.file.cache.preserved-space参数。

    说明

    参数取值大小写敏感。

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

  • VVR 4.0.12及后续4.0.x版本:DISABLE

  • VVR-6.0.1及以上版本:SPECIFIED_TABLE_ENABLE

参数取值如下:

  • DISABLE:禁用KV分离。

  • GLOBAL_ENABLE:启用KV分离。

  • SPECIFIED_TABLE_ENABLE :由引擎根据作业算子特点自动开启或关闭KV分离。

    说明

    实时计算引擎VVR 6.0.1及以上版本支持该取值。

说明
  • 参数取值大小写敏感。

  • 在实时计算引擎VVR 4.0.x版本中,如果您发现Join作业的Join成功率比较低而Value又比较大时,则可以将该参数取值设置为GLOBAL_ENABLE,进而取得更好的性能。

    您可以通过Join节点的Records Received和Records Sent的比例,大致估算Join成功率。

  • 在实时计算引擎VVR 6.0.1及以上版本,推荐您保持参数默认值,SQL引擎会根据作业算子特点自动开启KV分离。详情请参见高性能Flink SQL优化技巧

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

参数取值如下:

  • DISABLED:禁用该功能。

  • MONITORING:GeminiStateBackend会持续监控运行情况,并在日志中给出调参建议,但不自动进行参数调整。

  • ACTIVE(默认值):GeminiStateBackend将持续监控运行情况,并自动进行参数调整。但只针对未在flink-conf.yaml中配置的Gemini相关的部分参数。

  • FORCEFUL:GeminiStateBackend将持续监控运行情况,并自动进行参数调整,同时会覆盖在flink-conf.yaml中配置的Gemini相关的部分参数。

说明
  • 参数取值大小写不敏感。

  • 推荐您保持参数默认值,不用修改。

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。

说明
  • 默认不配置该参数。

  • 输入的end时间需要晚于start时间。

  • 设置该参数后会导致更多的资源消耗,因此推荐您保持默认不配置该参数。

state.backend.gemini.auto-tune.burst.end.x