部署

Introduction #

物化表的创建及运维涉及多个组件的协同工作。本文将从架构解析、环境准备、部署流程到操作实践,系统地说明物化表的完整部署方案。

架构介绍 #

  • Client: 可以是任何能够与 Flink SQL Gateway 交互的客户端,如 SQL 客户端Flink JDBC 驱动 等。
  • Flink SQL Gateway: 支持创建、修改和删除物化表。并包含了一个内置的工作流调度器,用于定期刷新全量模式的物化表。
  • Flink Cluster: 用于运行物化表刷新作业的 Flink 集群。
  • Catalog: 负责管理物化表元数据的创建、查询、修改和删除。
  • Catalog Store: 提供 Catalog 属性持久化功能,以便在操作物化表时自动初始化 Catalog 并获取相关的元数据。
Illustration of Flink Materialized Table Architecture

部署准备 #

物化表刷新作业目前支持在以下集群环境中运行:

部署 SQL Gateway #

物化表必须通过 SQL Gateway 创建,SQL Gateway 需要针对元数据持久化和作业调度进行特定的配置。

配置 Catalog Store #

config.yaml 中增加 catalog store 相关配置:

table:
  catalog-store:
    kind: file
    file:
      path: {path_to_catalog_store} # 替换成实际的路径

更多详情配置可参考 Catalog Store

配置工作流调度器插件 #

config.yaml 增加工作流调度器配置,用于定时调度刷新作业。 当前我们仅支持 embedded 调度器:

workflow-scheduler:
  type: embedded

启动 SQL Gateway #

使用以下命令启动 SQL Gateway:

./sql-gateway.sh start

注意 Catalog 必须支持创建物化表,目前只有 Paimon Catalog 支持。

操作指南 #

连接到 SQL Gateway #

使用 SQL Client 的示例:

./sql-client.sh gateway --endpoint {gateway_endpoint}:{gateway_port}

创建物化表 #

在 Standalone 集群运行刷新作业 #

Flink SQL> SET 'execution.mode' = 'remote';
[INFO] Execute statement succeeded.

FLINK SQL> CREATE MATERIALIZED TABLE my_materialized_table
> ...
[INFO] Execute statement succeeded.

在 session 模式下运行刷新作业 #

在 session 模式下执行时,需要提前创建 session 集群,具体可以参考文档 yarn-sessionkubernetes-session

Kubernetes session 模式:

Flink SQL> SET 'execution.mode' = 'kubernetes-session';
[INFO] Execute statement succeeded.

Flink SQL> SET 'kubernetes.cluster-id' = 'flink-cluster-mt-session-1';
[INFO] Execute statement succeeded.

FLINK SQL> CREATE MATERIALIZED TABLE my_materialized_table
> ...
[INFO] Execute statement succeeded.

设置 execution.modekubernetes-session 并设置参数 kubernetes.cluster-id 指向一个已经存在的 Kubernetes session 集群.

YARN session 模式:

Flink SQL> SET 'execution.mode' = 'yarn-session';
[INFO] Execute statement succeeded.

Flink SQL> SET 'yarn.application.id' = 'application-xxxx';
[INFO] Execute statement succeeded.

FLINK SQL> CREATE MATERIALIZED TABLE my_materialized_table
> ...
[INFO] Execute statement succeeded.

设置 execution.modeyarn-session 并设置参数 yarn.application.id 指向一个已经存在的 YARN session 集群。

在 application 模式下运行刷新作业 #

Kubernetes application 模式:

Flink SQL> SET 'execution.mode' = 'kubernetes-application';
[INFO] Execute statement succeeded.

Flink SQL> SET 'kubernetes.cluster-id' = 'flink-cluster-mt-application-1';
[INFO] Execute statement succeeded.

FLINK SQL> CREATE MATERIALIZED TABLE my_materialized_table
> ...
[INFO] Execute statement succeeded.

设置 execution.modekubernetes-applicationkubernetes.cluster-id 是一个可选配置,如果未配置,在提交作业时会自动生成。

YARN application 模式:

Flink SQL> SET 'execution.mode' = 'yarn-application';
[INFO] Execute statement succeeded.

FLINK SQL> CREATE MATERIALIZED TABLE my_materialized_table
> ...
[INFO] Execute statement succeeded.

设置 execution.modeyarn-applicationyarn.application.id 无需配置。

运维操作 #

集群信息(如 execution.modekubernetes.cluster-id)已持久化在 Catalog 中,暂停或恢复物化表刷新作业时无需重复设置。

暂停刷新作业 #

-- 暂停物化表刷新作业
Flink SQL> ALTER MATERIALIZED TABLE my_materialized_table SUSPEND
[INFO] Execute statement succeeded.

恢复刷新作业 #

-- 恢复物化表刷新作业
Flink SQL> ALTER MATERIALIZED TABLE my_materialized_table RESUME
[INFO] Execute statement succeeded.

修改查询定义 #

-- 修改物化表查询定义
Flink SQL> ALTER MATERIALIZED TABLE my_materialized_table
> AS 
> ...
[INFO] Execute statement succeeded.