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/
    避免多作业、跨环境互相覆盖。
相关推荐
larance10 小时前
Gunicorn + Nginx+systemd 配置flask
nginx·flask·gunicorn
华农DrLai17 小时前
Spark SQL Catalyst 优化器详解
大数据·hive·sql·flink·spark
岁岁种桃花儿18 小时前
Flink从入门到上天系列第一篇:搭建第一个Flink程序
大数据·linux·flink·数据同步
历程里程碑18 小时前
普通数组-----除了自身以外数组的乘积
大数据·javascript·python·算法·elasticsearch·搜索引擎·flask
Hello.Reader1 天前
Flink ZooKeeper HA 实战原理、必配项、Kerberos、安全与稳定性调优
安全·zookeeper·flink
Hello.Reader1 天前
Flink 使用 Amazon S3 读写、Checkpoint、插件选择与性能优化
大数据·flink
Hello.Reader1 天前
Flink 对接 Google Cloud Storage(GCS)读写、Checkpoint、插件安装与生产配置指南
大数据·flink
Hello.Reader1 天前
Flink Kubernetes HA(高可用)实战原理、前置条件、配置项与数据保留机制
贪心算法·flink·kubernetes
wending-Y1 天前
记录一次排查Flink一直重启的问题
大数据·flink