Flink SQL 参数记录

457 阅读1分钟

官方参考链接

nightlies.apache.org/flink/flink…

记录总结


// 初始化 table environment

TableEnvironment tEnv = ...

// 获取 tableEnv 的配置对象

Configuration configuration = tEnv.getConfig().getConfiguration();

// 设置参数:

// 开启 miniBatch
//MiniBatch 是微批处理,原理是缓存一定的数据后再触发处理,以减少对 State 的访问,
//从而提升吞吐并减少数据的输出量。MiniBatch 主要依靠在每个 Task 上注册的 Timer 线程
//来触发微批,需要消耗一定的线程调度性能。

configuration.setString("table.exec.mini-batch.enabled", "true");

// 批量输出的间隔时间

configuration.setString("table.exec.mini-batch.allow-latency", "5 s");

// 防止 OOM 设置每个批次最多缓存数据的条数,可以设为 2 万条

configuration.setString("table.exec.mini-batch.size", "20000");

// 开启 LocalGlobal
//LocalGlobal 优 化 将 原 先 的 Aggregate 分 成 Local+Global 两 阶 段 聚 合 , 
//即MapReduce 模型中的 Combine+Reduce 处理模式。
//第一阶段在上游节点本地攒一批数据进行聚合(localAgg),并输出这次微批的增量值(Accumulator)。
//第二阶段再将收到的 Accumulator 合并(Merge),得到最终的结果(GlobalAgg)。
//LocalGlobal 本质上能够靠 LocalAgg 的聚合筛除部分倾斜数据,从而降低 GlobalAgg的热点,提升性能。

configuration.setString("table.optimizer.agg-phase-strategy", "TWO_PHASE");

// 开启 Split Distinct

configuration.setString("table.optimizer.distinct-agg.split.enabled", "true");

// 第一层打散的 bucket 数目

configuration.setString("table.optimizer.distinct-agg.split.bucket-num", "1024");

// TopN 的缓存条数

configuration.setString("table.exec.topn.cache-size", "200000");

// 指定时区
//本地时区定义了当前会话时区 id。当本地时区的时间戳进行转换时使用。
//在内部,带有本地时区的时间戳总是以 UTC 时区表示。
//但是,当转换为不包含时区的数据类型时(例如TIMESTAMP, TIME 或简单的 STRING),会话时区在转换期间被使用。
//为了避免时区错乱的问题,可以参数指定时区。

configuration.setString("table.local-time-zone", "Asia/Shanghai");