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/
    避免多作业、跨环境互相覆盖。
相关推荐
starzy19901 天前
Flink Rpc通信源码级详解:从RpcService到动态代理的完整调用链路
大数据·rpc·flink
qq_2518364572 天前
理发管理系统 —— 会员模块
开发语言·前端·python·flask
昔我往昔2 天前
init文件介绍
python·flask
starzy19902 天前
Flink Akka底层原理深度剖析:从ActorSystem到Dispatcher调度器的底层实现
大数据·flink
阿钱真强道2 天前
25 嵌入式操作系统 | 设备面板:用 Qt 控件把“设备“画出来(本节不接串口)
开发语言·qt·flask·架构设计·协议契约
nvd112 天前
# 从 192 秒到 13 秒:Apache Flink 批处理极速调优实战记录
大数据·flink·apache
starzy19903 天前
Flink 优化之网络缓存优化及参数详解:从数据传输机制到反压原理的生产调优指南
网络·缓存·flink
阿钱真强道3 天前
30 嵌入式操作系统 | 上位机界面:Flask 网页显示 + 控制闭环
后端·python·flask
沐欣工作室_lvyiyi4 天前
基于Flask的旅游大数据分析与可视化系统(论文+源码)
python·flask·旅游
智码看视界4 天前
Edge AI 全栈实战 ④:向量数据库 + RAG 让 IoT 诊断拥有“记忆“
flink·向量数据库·rag·全栈开发·edgeai·iot诊断