Flink 对接 Azure Blob Storage / ADLS Gen2:wasb:// 与 abfs://(读写、Checkpoint、插件与认证)

1、选型:wasb vs abfs(以及 SSL 变体)

1.1 WASB(Blob Storage,兼容方案)

  • wasb://:非加密访问
  • wasbs://:SSL 加密访问(推荐用这个)

URI 格式:

  • wasb://<container>@$<account>.blob.core.windows.net/<object-path>
  • wasbs://<container>@$<account>.blob.core.windows.net/<object-path>

1.2 ABFS(ADLS Gen2,推荐方案)

Azure 推荐访问 ADLS Gen2 用 ABFS(即便 WASB 也能"兼容访问")。

  • abfs://:非加密
  • abfss://:SSL 加密(推荐用这个)

URI 格式:

  • abfs://<container>@$<account>.dfs.core.windows.net/<object-path>
  • abfss://<container>@$<account>.dfs.core.windows.net/<object-path>

注意:abfs:// 只能用于 ADLS Gen2 存储账号。你需要先确认你的 Storage Account 是否为 ADLS Gen2(Azure 文档提供识别方式)。

2、代码示例:读、写、Checkpoint 存 Azure(以 wasb 为例)

2.1 从 Azure 读(FileSource)

java 复制代码
FileSource<String> fileSource = FileSource.forRecordStreamFormat(
        new TextLineInputFormat(),
        new Path("wasb://<your-container>@$<your-azure-account>.blob.core.windows.net/<object-path>")
).build();

env.fromSource(
    fileSource,
    WatermarkStrategy.noWatermarks(),
    "azure-blob-storage-input"
);

2.2 写入 Azure(FileSink)

java 复制代码
stream.sinkTo(
    FileSink.forRowFormat(
        new Path("wasb://<your-container>@$<your-azure-account>.blob.core.windows.net/<object-path>"),
        new SimpleStringEncoder<String>()
    ).build()
);

2.3 用 Azure 作为 Checkpoint Storage

java 复制代码
Configuration config = new Configuration();
config.set(CheckpointingOptions.CHECKPOINT_STORAGE, "filesystem");
config.set(CheckpointingOptions.CHECKPOINTS_DIRECTORY,
        "wasb://<your-container>@$<your-azure-account>.blob.core.windows.net/<object-path>");
env.configure(config);

生产建议:如果你的目标是 ADLS Gen2,优先把以上示例中的 wasb://...blob.core.windows.net 替换为 abfss://...dfs.core.windows.net,并配套用 managed identity 认证(见下文)。

Flink 提供 flink-azure-fs-hadoop 插件(shaded 版),用于接入 Azure 文件系统。

安装方式:把 jar 从 opt 拷贝到 plugins(启动 Flink 前完成):

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

插件注册的 scheme:

  • wasb://wasbs://(SSL)

(ABFS 的认证与使用依赖 Hadoop ABFS 体系,下面单独讲。)

4、认证与凭证配置:WASB 与 ABFS 两条路线

4.1 WASB:两种常见配置方式

WASB 的 Hadoop Azure Filesystem 支持按 Hadoop 文档配置。Flink 为了方便,做了一个"转发规则":

  • 所有 fs.azure.* 前缀的 Flink 配置,会转发到 Hadoop 配置里
yaml 复制代码
fs.azure.account.key.<account_name>.blob.core.windows.net: <azure_storage_key>
方式 B:从环境变量读取 Storage Key(更安全)

把 key 放到环境变量 AZURE_STORAGE_KEY,然后在 Flink 配置里指定 key provider:

yaml 复制代码
fs.azure.account.keyprovider.<account_name>.blob.core.windows.net: org.apache.flink.fs.azurefs.EnvironmentVariableKeyProvider

这种方式更适合 K8s(Secret 注入环境变量)、或避免明文写入配置文件的场景。

4.2 ABFS(ADLS Gen2):推荐 Managed Identity

ABFS 支持多种认证方式,具体可参考 Hadoop ABFS 文档。但 Azure 官方更推荐:

  • 使用 Azure Managed Identity 访问 ADLS Gen2(更安全、免密钥)

前提条件:

  • Flink 集群部署在支持 Managed Identities 的 Azure 服务上(Azure 有官方清单)
  • 作业运行的身份(系统分配或用户分配)需要被授予访问对应 ADLS Gen2 的权限
使用 Storage Key 访问 ABFS(不推荐,但可用)
yaml 复制代码
fs.azure.account.key.<account_name>.dfs.core.windows.net: <azure_storage_key>

5、生产实践建议(最容易踩坑的点)

  1. 优先用加密 scheme
  • Blob:wasbs://
  • ADLS Gen2:abfss://
  1. ADLS Gen2 就别纠结 wasb 兼容
  • 既然 Azure 推荐 ABFS,就尽量走 abfs/abfss,减少未来迁移成本
  1. 尽量不用 Storage Key
  • WASB 可用环境变量 provider
  • ABFS 强烈建议 managed identity(权限治理更清晰、密钥轮换更省心)
  1. Checkpoint 与 Sink 路径分层
  • .../<env>/<cluster>/<job>/checkpoints/
  • .../<env>/<cluster>/<job>/output/
    避免多作业、跨环境互相覆盖。
相关推荐
李白你好9 分钟前
云安全渗透测试框架 - 支持 AWS、Azure、GCP、阿里云、腾讯云、华为云的综合渗透测试工具和指南
阿里云·azure·aws
B站_计算机毕业设计之家17 小时前
计算机毕业设计:Python当当网图书数据全链路处理平台 Django框架 爬虫 Pandas 可视化 大数据 大模型 书籍(建议收藏)✅
爬虫·python·机器学习·django·flask·pandas·课程设计
念陌曦17 小时前
Flink总结
大数据·flink
AC赳赳老秦1 天前
使用OpenClaw tavily-search技能高效撰写工作报告:以人工智能在医疗行业的应用为例
运维·人工智能·python·flask·自动化·deepseek·openclaw
小陈工1 天前
FastAPI性能优化实战:从每秒100请求到1000的踩坑记录
python·性能优化·django·flask·numpy·pandas·fastapi
工业互联网专业2 天前
基于Python的黑龙江旅游景点数据分析系统的实现_flask+spider
python·flask·vue·毕业设计·源码·课程设计·spider
大叔_爱编程2 天前
基于协同过滤算法的理财产品推荐系统-flask
python·flask·vue·毕业设计·源码·课程设计·协同过滤
阿梦Anmory2 天前
保姆级教程:Flask应用实现后台常驻运行(Linux服务器)
linux·服务器·flask
岁岁种桃花儿2 天前
Flink从入门到上天系列第二十五篇:Flink和Kafka连接时的精准一次性
大数据·flink·kafka
紫丁香2 天前
Dify源码深度剖析3
后端·python·ai·flask·fastapi