You need to enable JavaScript to run this app.
导航
Flink 使用 HNS 和 Proton 优化 TOS 访问性能
最近更新时间:2025.09.04 11:30:15首次发布时间:2025.09.04 11:30:15
复制全文
我的收藏
有用
有用
无用
无用

1. 文档背景

对象存储 TOS 因其高可用、高可靠、无限容量及低成本的特点,已成为流式计算 Flink 版在存算分离架构下首选的数据存储底座。然而,在 Flink 任务(尤其是使用 Paimon、Iceberg 等数据湖格式)与 TOS 进行高频交互时,传统的访问方式可能会遇到性能瓶颈和原子性操作支持不足的问题。
为最大化发挥 Flink on TOS 的架构优势,提升作业稳定性和数据处理效率,本文档提供两项关键的性能优化建议:启用 TOS 分层命名空间(HNS)桶开启 Flink TOS Filesystem Plugin 的 Proton 加速功能

2. 优化内容

2.1. 优化一:使用 TOS 分层命名空间(HNS)桶

优化说明:
TOS 分层命名空间 HNS(Hierarchical NameSpace)是一种全新的桶类型。它在保留对象存储无限扩展能力的同时,引入了类似文件系统的目录树状元数据结构,解决了传统扁平命名空间 FNS(Flat NameSpace)桶在大数据场景下的关键痛点。
核心优势与适用场景:

  1. 高效的原子性目录操作
    • 原理: HNS 桶原生支持高效的目录级 RenameMove 操作,这些操作在底层是原子性的。
    • Flink 场景示例:
      • Streaming File Sink 的 Checkpoint 提交: Flink 在写入文件后,最终通过 Rename 临时文件到正式目录来完成 Checkpoint 提交。HNS 桶使此操作变得瞬时且原子,极大缩短了 Checkpoint 最终化时间,提升了作业稳定性和吞吐量。
      • Paimon/Iceberg 表事务提交: 数据湖表格式通过 Rename 一个元数据文件来完成一次事务提交。HNS 桶能确保提交的原子性和高性能,避免因提交缓慢或失败导致的数据不一致或作业延迟。
  2. 卓越的 List 和 Head 性能
    • 原理: 对目录的 ListHead 操作在 HNS 桶中性能极佳,因为其元数据按目录结构组织。
    • Flink 场景示例:
      • 实时数据扫描: 对于监控目录下是否有新文件到达的源表(如 Hive Catalog 下的 Paimon 表),高效的 List 操作可以降低源节点的扫描延迟,更快地发现新数据,减少端到端的数据处理延迟。
  3. 避免多任务写冲突
    • 原理: HNS 支持真正的目录独占创建和访问语义。
    • Flink 场景示例:
      • 多任务写入同一张 Paimon 表: 在 FNS 桶中,多个并发写入的作业可能会在创建相同的临时目录时发生冲突。HNS 桶可以完美避免此问题,保障并发写入的稳定性和数据一致性,非常适合湖仓一体(Data Lakehouse)的并发入库场景。

2.2. 优化二:开启 Proton 客户端加速

优化说明:
flink.plugins.filesystem.tos.proton.enabled: true 参数用于启用由 E-MapReduce (EMR) 团队打造的 Proton 加速引擎。该引擎针对 TOS 的访问模式进行了深度优化,是提升 Flink 读写 TOS 性能的首选方案。
核心优势:

  1. 极致的读写性能:
    • Proton 实现了 HDFS 标准 API,将对文件系统的调用高效映射为对 TOS 的访问。通过连接池管理、批量请求合并、智能预读/预写等底层优化,在无缓存模式下,其读写性能可与自建 HDFS 持平,远超通用 SDK 的性能表现。
  2. 高性能的 JobCommitter:
    • 针对 Flink Streaming File Sink 的最终一致性提交问题,Proton 提供了优化版的 JobCommitter。它与 HNS 桶结合,能实现最快、最可靠的文件提交,彻底解决 Rename 性能瓶颈,确保 Exactly-Once 语义。
  3. 和 HNS 的完美兼容
    • Proton 针对 HNS 接口做了大量针对性适配和优化,能充分发挥 HNS 分层命名空间的一致性和性能优势。

3. 操作方法

3.1. 如何启用 HNS 分层命名空间桶

此优化需要在创建 TOS 存储桶时进行配置,现有 FNS 桶无法直接升级为 HNS 桶。

  1. 创建新桶: 登录 TOS 控制台
  2. 关键配置: 在创建桶的“高级配置”环节,找到 “命名空间类型” 选项。

Image

  1. 选择类型: 选择 “分层命名空间(HNS)”
  2. 关联使用: 将您的 Flink 作业的写入 TOS 路径指向新创建的 HNS 桶的路径(例如:tos://your-hns-bucket/path/to/checkpoint)。

注意: HNS 创建前请参阅 官方文档 确认是否符合您的需求。

此优化通过 Flink 作业参数进行配置,非常简单。

  1. 位置: 在流式计算 Flink 版控制台,创建或编辑作业时,进入 “作业参数” 配置页面。
  2. 添加参数: 在“高级参数”或“自定义参数”部分,添加以下配置:
flink.plugins.filesystem.tos.proton.enabled: true

Image

  1. 生效: 提交或重启作业,让配置生效。作业中的所有 tos:// 路径的读写都将通过高性能的 Proton 客户端进行。