Flink 对接阿里云 OSS(Object Storage Service)读写、Checkpoint、插件安装与配置模板

1、OSS URI 规则与常见使用场景

在 Flink 中访问 OSS 的路径格式:

  • oss://<your-bucket>/<object-name>

这里的 <object-name> 既可以是文件,也可以是目录前缀(类似路径)。

常用场景

  • FileSource 从 OSS 读文件/目录
  • FileSink 写入 OSS
  • Checkpoint/Savepoint 存 OSS(生产常用,尤其云上)
  • HA 元数据目录、EmbeddedRocksDBStateBackend 等(只要接受 FileSystem URI)

2、代码示例:读、写、Checkpoint 放 OSS

2.1 从 OSS 读取(FileSource)

java 复制代码
FileSource<String> fileSource = FileSource.forRecordStreamFormat(
        new TextLineInputFormat(),
        new Path("oss://<your-bucket>/<object-name>")
).build();

env.fromSource(
    fileSource,
    WatermarkStrategy.noWatermarks(),
    "oss-input"
);

2.2 写入 OSS(FileSink)

java 复制代码
stream.sinkTo(
    FileSink.forRowFormat(
        new Path("oss://<your-bucket>/<object-name>"),
        new SimpleStringEncoder<String>()
    ).build()
);

2.3 使用 OSS 作为 Checkpoint Storage

java 复制代码
Configuration config = new Configuration();
config.set(CheckpointingOptions.CHECKPOINT_STORAGE, "filesystem");
config.set(CheckpointingOptions.CHECKPOINTS_DIRECTORY, "oss://<your-bucket>/<object-name>");
env.configure(config);

Flink 提供 flink-oss-fs-hadoop 插件对接 OSS:

  • scheme:oss://
  • 插件会注册 oss:// 的默认 FileSystem wrapper
  • 以 shaded 方式提供(便于开箱即用,减少依赖冲突)

3.1 安装方式(plugins 目录)

启动 Flink 前把 JAR 从 opt 拷贝到 plugins

bash 复制代码
mkdir ./plugins/oss-fs-hadoop
cp ./opt/flink-oss-fs-hadoop-2.2.0.jar ./plugins/oss-fs-hadoop/

提示:插件目录建议"一插件一子目录",后期排查 classpath/加载问题更清晰。

为了易用,OSS 插件允许你在 flink-conf.yaml 里直接使用 Hadoop OSS 的配置键(与 core-site.xml 同体系)。完整可用键可参考 Hadoop OSS 文档;其中有 3 个是必填项,其它多为高级调优项。

4.1 必填配置项(最小可用集)

yaml 复制代码
fs.oss.endpoint: <your-oss-endpoint>
fs.oss.accessKeyId: <your-access-key-id>
fs.oss.accessKeySecret: <your-access-key-secret>

说明:

  • fs.oss.endpoint:你要连接的 OSS endpoint(和 region/内外网域名相关)
  • accessKeyId/accessKeySecret:AK/SK(注意保护,不要明文散落)

生产建议:把这些配置下发到集群配置中心或用加密/挂载方式注入,避免写进镜像或代码库。

5、更安全的凭证方式:CredentialsProvider(推荐)

除了直接在配置里写 AK/SK,你还可以指定凭证提供器(CredentialsProvider),把密钥放在环境变量等更安全的载体里。

示例:从环境变量 OSS_ACCESS_KEY_IDOSS_ACCESS_KEY_SECRET 读取:

yaml 复制代码
fs.oss.credentials.provider: com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider

这种方式的好处:

  • 避免 AK/SK 明文出现在 flink-conf.yaml
  • 更适合 K8s(Secret 注入为 env)或 YARN(container env)等部署方式
  • 便于轮换密钥(更新环境变量即可)

文档也提到还有其他 credential provider,可按你们的安全体系选择(如实例角色/STS 等,取决于你们运行环境的能力与合规要求)。

6、生产落地 checklist(少走弯路)

  1. 先装插件再启动集群:plugins 目录的 jar 需要在 JobManager/TaskManager 启动前就位
  2. 路径显式写 oss://:避免 default-scheme 影响路径归属
  3. 凭证优先用 provider:尽量别把 AK/SK 明文写配置
  4. checkpoint 目录分层 :例如 oss://bucket/checkpoints/<cluster>/<job>/,避免不同作业互相污染
  5. 调优参数按现象上:先保证可用稳定,再逐步做性能调参(并发、超时、重试、分片等)
相关推荐
2501_912784087 小时前
后端开发实战:反向海淘多币种结算模块自研与SaaS复用对比
大数据·人工智能·taocarts·跨境saas
团象科技7 小时前
走访近百支出海技术团队后的海外云计算资源选型实操观察
大数据·人工智能·算法
2601_957190907 小时前
超元力mr卡丁车:轻量化落地运营,适配中大型场地的新型游乐业态
大数据·人工智能·mr
YangYang9YangYan7 小时前
2026新高考背景下大数据专业报考指南:数据分析的价值与前景
大数据·数据分析·高考
段一凡-华北理工大学7 小时前
工业领域的Hadoop架构学习~系列文章18:制造业Hadoop应用实践 - 从数据到智能的完整闭环
大数据·人工智能·hadoop·分布式·学习·架构·高炉炼铁
属鼠哥7 小时前
HDFS 短路本地读取系列(二):你以为的「本地读」和真正的「本地读」—getLegacy vs getBlockReaderLocal 的本质差异
大数据·hadoop
翼龙云_cloud8 小时前
阿里云代理商:轻量服务器建站常见问题及解决方案汇总
运维·阿里云·云计算
孟俊宇-MJY8 小时前
CSDN AI数字营销全功能实测
大数据·人工智能
施企云8 小时前
有哪些好用的基建工程物资管理系统,施企云工程物资云案例分享
大数据
zhangrelay8 小时前
2000-2025 年适龄升学智能大模型整理数据
大数据·笔记·学习