更新时间:2024-11-29 GMT+08:00

流式读Hudi表开发规范

流式读Hudi参数说明

表1 流式读Hudi参数说明

参数名称

参数描述

建议值

说明

Connector

读取表类型。

hudi

必填

Path

表存储的路径。

根据实际填写

必填

table.type

Hudi表类型:

  • MERGE_ON_READ
  • COPY_ON_WRITE(默认值)

COPY_ON_WRITE

必填

hoodie.datasource.write.recordkey.field

表的主键。

根据实际填写

必填

write.precombine.field

数据合并字段。

根据实际填写

必填

read.tasks

读Hudi表的task并行度,默认值:4。

4

选填

read.streaming.enabled

是否开启流式增量模式:

  • true:流式增量模式(流读场景)。
  • false:批量读模式。

true

必填

read.streaming.start-commit

  • yyyyMMddHHmmss:Stream增量消费,指定“yyyyMMddHHmmss”格式的起始Commit(闭区间),默认从最新Commit。
  • earliest:表示从头开始消费。

-

选填

hoodie.datasource.write.keygenerator.type

上游表主键生成类型:

  • SIMPLE(默认值)
  • COMPLEX(Spark建表时必填,且需设置为COMPLEX或与Spark建表时指定的参数值相同)
  • TIMESTAMP
  • CUSTOM
  • NON_PARTITION
  • GLOBAL_DELETE

COMPLEX

选填

read.streaming.check-interval

流读监测上游新提交的周期(分钟),流量大时建议使用默认值,默认值:1。

5

选填

read.end-commit

Batch增量消费,通过参数“read.streaming.start-commit”指定起始消费位置,通过参数“read.end-commit”指定结束消费位置,为闭区间,即包含起始、结束的Commit,默认到最新Commit。

-

选填

read.rate.limit

流读Hudi的限流速率,单位为每秒的条数。默认值:0,表示不限速。该值为总限速大小,每个算子的限速大小需除以读算子个数(read.tasks)。

-

选填

changelog.enabled

是否写入Changelog消息:

  • false:不写入(默认值)。
  • true:写入,CDC场景需写入Changelog消息。

false

选填

hoodie.datasource.write.hive_style_partitioning

是否使用Hive风格的分区格式:

  • false:不使用Hive风格,分区目录名称仅使用分区值(默认值)。
  • true:使用Hive风格,分区目录名称格式为<partition_column_name>=<partition_value>。

    如果是Spark创建的Hudi分区表时为必填,且需要设置为true。

-

选填

流式读Hudi开发建议

  • 建议设置合理的消费参数避免File Not Found问题

    当下游消费Hudi过慢,上游写入端会把Hudi文件归档,导致File Not Found问题。

    优化建议:

    1. 提高下游读取速率,如增加read.tasks数量。
    2. 增加数据消费速率,如提高限流的阈值。
    3. 增大Compaction的周期以增加log文件保留时长,可适当避免File Not Found。
  • 建议Hudi作为Source表时设置限流

    Hudi表作为Source表时,为防止数据上限超过流量峰值导致作业出现异常,建议设置限流(read.rate.limit),限流上限应该为业务上线压测的峰值。

  • 及时对Hudi表进行Compaction,防止Hudi source算子checkpoint完成时间过长

    当Hudi Source算子checkpoint完成时间长时,检查该Hudi表Compaction是否正常。因为当长时间不做Compaction时list性能会变差。

  • 流读Hudi MOR表时,建议开启log index特性提升Flink流读性能

    Hudi的Mor表可以通过log index提升读写性能, Sink和Source表添加属性 'hoodie.log.index.enabled'='true'

  • DDL变更对流读Hudi表的影响

    DDL添加列对Hudi表读取作业无影响。其他DDL变更(如修改列类型、修改列名、删除列)影响Hudi表读取作业,需要在变更前停止作业。