环境参数

什么是环境参数

环境参数是实时任务运行过程中所使用的参数,通过 任务页面 → 右侧边栏 →环境参数 的方式可查看当前任务的对应参数,修改可对任务运行过程中任务并发数、数据一致性,CheckPoint生成间隔等具体内容进行控制,从而使任务得以更好的运行。

Kafka Kerberos认证参数

在FlinkSQL任务中使用开启了Kerberos认证的Kafka数据源时,需要在对应环境参数中手动开启认证参数。
Client : 数据源开启Zookeeper
KafkaClient: 数据源开启Kerberos认证
默认情况下只需要取消注释符号开启 contexts 参数即可。

## kafka kerberos相关参数
## security.kerberos.login.contexts=Client,KafkaClient

Kafka Kerberos

针对Kafka数据源开启Kerberos情况,需要在环境参数中配置不同的内容,具体如下:
1.Zookeeper开启Kerberos,Kafka没开 security.kerberos.login.contexts=Client 2.Zookeeper、Kafka都开启了Kerberos security.kerberos.login.contexts=Client,KafkaClient 3.Zookeeper、Kafka都不开启 注销Security参数: #security.kerberos.login.contexts=Client

共享连接池

在异步访问维表时,若不开启共享连接池时,每个维表将会独立创建连接到目标数据库,在维表数量多且每个维表共享连接池数量较高的情况时,将会对数据库造成巨大压力。针对于这种情况,平台支持通过环境参数开启共享连接池配置.

开启共享连接池前提:任务启动在同一个TM上

如何开启共享连接池?

用户在任务的环境参数中通过 async.side.clientShareasync.side.poolSize 两个参数控制共享池的开启和上限;

## 异步访问维表是否开启连接池共享,开启则 1.一个tm上多个task共享该池, 2.一个tm上多个url相同的维表单/多个task共享该池 (默认false)
# async.side.clientShare=true
## 连接池中连接的个数,上面参数为true才生效(默认5)
# async.side.poolSize=3

共享连接池结果

1.一个tm上多个task共享该池
2.一个tm上多个url相同的维表单/多个task共享该池 (默认false)

可能结果
1. 同一机器上 单一任务多个维表使用同一个JDBC连接数据库 共享连接池数量
2. 同一机器上 多个任务多个维表(URL相同)使用同一个JDBC连接数据库 共享连接池数量
3. 同一机器上 多个任务多个维表使用同一个JDBC连接数据库 不共享连接池数量
4. 不同机器上 单一任务多个维表使用同一个JDBC连接数据库 不共享连接池数量

当开启共享连接池,FlinkSQL任务中维表本身的 异步线程池 参数不生效;

MiniBatch聚合

MiniBatch 聚合的核心思想是将一组输入的数据缓存在聚合算子内部的缓冲区中。当输入的数据被触发处理时,每个 key 只需一个操作即可访问状态。这样可以大大减少状态开销并获得更好的吞吐量。但是,这可能会增加一些延迟,因为它会缓冲一些记录而不是立即处理它们。这是吞吐量和延迟之间的权衡。
下图说明了 MiniBatch 聚合如何减少状态操作:
4 3 2021 17 09 16 PM 默认情况下 MiniBatch 优化是被禁用的。开启这项优化,需要用户在环境参数中手动设置如下:

##  是否开启minibatch
##  可以减少状态开销。这可能会增加一些延迟,因为它会缓冲一些记录而不是立即处理它们。这是吞吐量和延迟之间的权衡
##  是否开启
table.exec.mini-batch.enabled=true
##  状态缓存时间
table.exec.mini-batch.allow-latency=5 s
##  状态最大缓存条数
table.exec.mini-batch.size=5000

##  是否开启Local-Global 聚合。前提需要开启minibatch
##  聚合是为解决数据倾斜问题提出的,类似于 MapReduce 中的 Combine + Reduce 模式
table.optimizer.agg-phase-strategy=TWO_PHASE

##  是否开启拆分 distinct 聚合
##  Local-Global 可以解决数据倾斜,但是在处理 distinct 聚合时,其性能并不令人满意。
##  如:SELECT day, COUNT(DISTINCT user_id) FROM T GROUP BY day 如果 distinct key (即 user_id)的值分布稀疏,建议开启
table.optimizer.distinct-agg.split.enabled=true
若开启MiniBatch,则 enabled allow-latency size 三个参数必须同时开启。 更多说明可参考 配置