flink_book/hudi/Hudi参数调优.md
2023-10-07 23:29:11 +08:00

3.8 KiB
Raw Blame History

内存

参数名称 描述 默认值 备注
write.task.max.size 写任务的最大内存(以MB为单位)当达到阈值时它刷新最大大小的数据桶以避免OOM。 1024 为写缓冲区预留的内存为write.task.max.size - compact .max_memory。当写任务的总缓冲区达到阈值时将刷新内存中最大的缓冲区
write.batch.size Flink支持到达一定阈值之后将数据写入到Hudi 64 推荐使用默认值
write.log_block.size hudi的日志写入器接收到消息后不会立刻flush数据写入器以LogBlock为单位将数据刷新到磁盘。 128 推荐使用默认值
write.merge.max_memory 对于COW表Hudi将会合并增量数据和base文件数据。增量数据将会被缓存和溢写磁盘。 100 推荐使用默认值
compaction.max_memory Compaction期间占用的最大内存 100 如果是在线压缩则可以在资源足够时打开它例如设置为1024MB

并行度

参数名称 描述 默认值 备注
write.tasks 写入器任务的并行度每个任务依次向1到N个桶写。 4 增加并行度对小文件的数量没有影响
write.bucket_assign.tasks 桶分配操作符的并行性。
无默认值使用Flink parallelism.default
parallelism.default 增加并行度也会增加桶的数量,
从而增加小文件(小桶)的数量。
write.index_boostrap.tasks index bootstrap的并行度增加并行度可以提高bootstarp阶段的效率。 parallelism.default 只有当index.bootstrap .enabled为true时才生效
read.tasks 读操作的并行度(批和流) / /
compaction.tasks 实时compaction的并行度默认为10 10 Online compaction 会占用写任务的资源,推荐使用offline compaction

Compaction

通过设置compaction.async.enabled = false关闭在线压缩但我们仍然建议对写作业启用compaction.schedule.enable。可以通过离线压缩来执行压缩计划。

参数名称 描述 默认值 备注
compaction.schedule.enabled 是否定期生成compaction计划 true 即使compaction.async.enabled = false也建议打开
compaction.async.enabled 异步压缩MOR默认启用 true 通过关闭此选项来关闭offline compaction
compaction.trigger.strategy 触发compaction的策略 num_commits --
compaction.delta_commits 触发压缩所需的最大delte提交默认为5次提交 5 --
compaction.delta_seconds 触发压缩所需的最大增量秒数默认为1小时 3600 --
compaction.max_memory compaction溢出映射的最大内存(以MB为单位)默认为100MB 100 有足够的资源建议调整到1024MB
compaction.target_io 每次压缩的目标IO(读和写)默认为5GB 5120 offline compaction 的默认值是500GB

触发compaction的策略

  • num_commits: 当达到N个delta提交时触发压缩。
  • time_elapsed当距离上次压缩时间> N秒时触发压缩。
  • num_and_time:当满足NUM_COMMITS和TIME_ELAPSED时进行trigger压缩。
  • num_or_time: 在满足NUM_COMMITS或TIME_ELAPSED时触发压缩。

Memory Optimization

MOR 表

  • Flink的状态后端设置为RocksDB默认为内存。
  • 如果有足够的内存compaction.max_memory可以设置大于100MB建议调整到1024MB。
  • 在配置TM内存的时候需要保证每个写任务都能分配到write.task.max.size对应的内存。需要保留一部分内存给TM的网络缓冲区和其他类型的任务(如bucketAssignFunctio)使用。
  • 需要注意compaction内存的变化compaction.max_memory控制的是压缩任务读取日志时可以使用每个任务的最大内存ompaction.tasks控制的是压缩任务的并行性。

COW表