## 内存 |参数名称 | 描述 | 默认值 | 备注 | |----|----|----|----| | 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表