6 个回答
监控与诊断:
1、指标监控
1、指标监控
反压状态(Web UI → 算子 BackPressure)。
状态大小(JobManager 日志或 State Size 指标)。
2、火焰图分析:通过 Async Profiler 定位热点代码(如 UDF 或聚合函数)。发布于:3周前 (05-16) IP属地:
数据类型与序列化方面的优化
1、ROW 类型优化
1、ROW 类型优化
使用 显式结构化类型(如 INT, TIMESTAMP(3)),而非 STRING,降低类型推断开销。
2、自定义序列化器:对复杂类型(如 Protobuf)实现 TypeInformation 提升效率。发布于:3周前 (05-16) IP属地:
执行环境与参数方面的调优:
1、资源配置
1、资源配置
并行度设置:根据数据量和复杂度调整,通常 Source/Sink 并行度与上下游同步,中间算子适度增加。
增加 TaskManager 堆内存(taskmanager.memory.process.size: 4096m)。
开启直接内存优化(网络缓冲区):taskmanager.memory.network.fraction: 0.1
2、Runtime 参数异步快照(提升吞吐):executor.async-snapshot: true
对象重用:避免频繁序列化(需数据不可变):pipeline.object-reuse: true
发布于:3周前 (05-16) IP属地:
状态与容错方面的优化:
1、状态后端选择
1、状态后端选择
流处理场景:优先 RocksDB(支持大状态和增量检查点)。
批处理场景:可选 Heap(内存足够时性能更优)。
2、TTL 配置状态过期:为状态设置生存时间,自动清理无效数据。
3、Checkpoint 优化增量检查点(RocksDB专用):state.backend.incremental: true
对齐超时调整:execution.checkpointing.aligned-checkpoint-timeout: 10s
发布于:3周前 (05-16) IP属地:
SQL逻辑方面的优化
1、逻辑化简
1、逻辑化简
过滤条件提前:将 WHERE 条件尽量前置,利用谓词下推减少处理数据量。
避免复杂嵌套子查询:将多层子查询转为 CTE(WITH 子句)或临时表。
2、Join 策略选择小表广播:使用 BROADCAST 提示广播小表,避免 Shuffle。
Interval Join 替代:流处理中优先事件时间区间 Join 减少状态存储。
维表 Join 异步化:使用 ASYNC 函数访问外部Redis/MySQL,避免同步阻塞。
3、窗口聚合调优滑动窗口步长调整:按业务容忍延迟调整步长(如从 1 秒 → 5 秒),减少触发频率。
Mini-Batch 聚合(需开启参数):
SET table.exec.mini-batch.enabled = true;
SET table.exec.mini-batch.allow-latency = '5s'; -- 微批间隔
SET table.exec.mini-batch.size = 1000; -- 微批行数
发布于:3周前 (05-16) IP属地:
数据摄入与处理方面的优化:
1、源头优化
1、源头优化
并行度匹配:确保 Source 并行度与 Kafka 分区数(或其他数据源)一致,避免资源闲置。
反压排查:通过 Flink Web UI 定位瓶颈,调整算子并行度或增加资源。
格式转换前置:在 Source 尽早完成 JSON/AVRO 解析,减少下游重复计算。
2、时间属性调整事件时间 vs 处理时间:优先事件时间(保证准确性),处理时间适合低延迟但允许乱序的场景。
Watermark 优化:按业务最大乱序时间设置,如 WATERMARK FOR ts AS ts - INTERVAL '5' SECOND,避免水位线推进过慢或过快。
3、数据倾斜处理两阶段聚合
动态分区裁剪:对大表 Join 使用动态过滤(需开启 table.optimizer.join-reorder-enabled=true)。
发布于:3周前 (05-16) IP属地:
我来回答
您需要 登录 后回答此问题!