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/
    避免多作业、跨环境互相覆盖。
相关推荐
Justice Young5 小时前
Flink测试题目及知识点整理(一)
大数据·flink
渣渣盟5 小时前
构建企业级实时数据管道:Kafka + Flink 最佳实践
分布式·flink·kafka
weixin_307779137 小时前
云计算大数据Azure服务分类详解
大数据·分类·自动化·云计算·azure
Lucky_Turtle1 天前
【Linux】debain13开启bbr
服务器·azure
码界筑梦坊1 天前
112-基于Flask的游戏行业销售数据可视化分析系统
开发语言·python·游戏·信息可视化·flask·毕业设计·echarts
juniperhan1 天前
Flink 系列第22篇:Flink SQL 参数配置与性能调优指南:从 Checkpoint 到聚合优化
大数据·数据仓库·分布式·sql·flink
不剪发的Tony老师1 天前
Flink CDC:一个基于流的实时数据集成工具
flink·etl
juniperhan2 天前
Flink 系列第21篇:Flink SQL 函数与 UDF 全解读:类型推导、开发要点与 Module 扩展
java·大数据·数据仓库·分布式·sql·flink
皮皮冰燃2 天前
docker-18-WSL中安装docker并部署flask服务
docker·容器·flask
凯瑟琳.奥古斯特2 天前
SQLAlchemy核心功能解析
开发语言·python·flask