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/
    避免多作业、跨环境互相覆盖。
相关推荐
大大大大晴天17 小时前
Flink生产问题排障-Kryo serializer scala extensions are not available
大数据·flink
百锦再4 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
QQ5110082854 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
QQ_19632884754 天前
Python-flask框架西山区家政服务评价系统网站设计与开发-Pycharm django
python·pycharm·flask
计算机专业码农一枚4 天前
Python-flask框架基于推荐算法的在线课程推荐系统设计与实现-Pycharm django
python·flask·推荐算法
NGINX开源社区5 天前
使用 Microsoft Entra ID 配置 NGINX Plus 以实现 SAML SSO
后端·python·flask
發糞塗牆5 天前
【Azure 架构师学习笔记 】- Azure AI(7)-Azure认知服务-Document Intelligence进阶使用
人工智能·ai·azure
yumgpkpm5 天前
AI视频生成:Wan 2.2(阿里通义万相)在华为昇腾下的部署?
人工智能·hadoop·elasticsearch·zookeeper·flink·kafka·cloudera
arvin_xiaoting5 天前
OpenClaw AI助手实战:自动化Azure DevOps PR审查与技能扩展
人工智能·自动化·azure