一、语法
SET 语句中字符串类型的参数值必须用半角单引号括起来,布尔值和数值型的可以不加单引号。
SET 配置项 = '参数值';
二、配置 SQL 作业状态保留时间
针对 GROUP BY 和 JOIN 等大状态的语句,Flink 提供了 Idle State Retention Time 机制,用户可以通过设置状态的最短保留时间和最长保留时间,避免状态的无限制增长造成作业崩溃(OOM)。例如,下面的语句指定了状态的最短保留时间是3小时。
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 在状态中维护了全量数量,可能会导致状态过大。
引入原因: Flink 非确定性更新(NDU)问题探索和规避。
可以通过 table.exec.sink.upsert-materialize 进行配置:
·auto(默认值):Flink 自行推断出乱序是否存在,如果可能存在乱序,则会添加 SinkUpsertMaterializer。
·none:不使用。
·force:强制使用。
需要注意,Flink 自行推断添加的 SinkUpsertMaterializer 不一定是有意义的,如果作业并行度为1或者用户明确知道 join 的 Key 不会发生变更,可以通过下面的配置关闭 SinkUpsertMaterializer。
table.exec.sink.upsert-materialize = 'none';