官方参考链接
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");