简介
注意
SET 命令属于高级用法,请谨慎使用,避免参数配置不当而引起的运行时异常。
SET 命令不支持注释,请不要在其后增加
--
注释信息。SET 语句行尾需加上分号。
语法
SET 语句中字符串类型的参数值必须用半角单引号括起来,布尔值和数值型的可以不加单引号。
SET 配置项 = '参数值';
示例
配置 SQL 作业状态保留时间
针对 GROUP BY 和 JOIN 等大状态的语句,Flink 提供了 Idle State Retention Time 机制,用户可以通过设置状态的最短保留时间和最长保留时间,避免状态的无限制增长造成作业崩溃(OOM)。例如,下面的语句指定了状态的最短保留时间是3小时。
注意
状态的最短保留时间和最长保留时间之间的差值必须大于5分钟,否则 Flink 会报错并忽略该设置。
时间单位的写法遵循 Flink 配置的规范,例如可以写10min、也可以写3h、3hour、7day、7d等。数值和单位之间的空格为可选项。
set table.exec.state.ttl = '3h';
启用 Table 的 Mini-Batch 支持
Flink SQL 对聚合提供了 Mini-Batch 支持,可以显著提升吞吐量。默认没有开启,因为会增加处理时延。如果希望使用 Mini-Batch,需要在 SQL 作业的编辑页面中添加以下语句,通过下面的设置项启用此功能(批次大小和延迟参数可以自行设置,但不可省略):
set table.exec.mini-batch.enabled = true;set table.exec.mini-batch.size = 5000;set table.exec.mini-batch.allow-latency = '200 ms';
避免使用 SinkUpsertMaterializer
SinkUpsertMaterializer 在状态中维护了全量数量,可能会导致状态过大。
可以通过 table.exec.sink.upsert-materialize 进行配置:
auto(默认值):Flink 自行推断出乱序是否存在,如果可能存在乱序,则会添加 SinkUpsertMaterializer。
none:不使用。
force:强制使用。
需要注意,Flink 自行推断添加的 SinkUpsertMaterializer 不一定是有意义的,如果作业并行度为1或者用户明确知道 join 的 Key 不会发生变更,可以通过下面的配置关闭 SinkUpsertMaterializer。
table.exec.sink.upsert-materialize = 'none';