Apache StreamPark 是一个专注于流处理应用程序开发和管理的开源平台,旨在简化 Apache Flink 和 Apache Spark 等流处理引擎的使用复杂度。它提供了一站式的应用开发、部署、监控和运维能力。
以下是关于 Apache StreamPark 的功能介绍、使用场景及详细使用步骤示例。
一、 核心功能介绍
- 应用开发与管理
- 代码托管: 支持 Git/SVN 拉取代码,也支持直接在平台上编写 SQL/Scala/Java 代码。
- 多引擎支持: 原生支持 Apache Flink 和 Apache Spark,同时兼容 DataStream API、Table API 和 SQL。
- 版本管理: 内置应用版本控制,支持一键回滚。
- 自动化构建与部署
- 自动构建: 集成 Maven/Gradle/SBT,自动完成项目编译打包。
- 多种部署模式: 支持 Remote、YARN-Application、YARN-Session、Kubernetes Session/Application/Native 等多种部署模式。
- CI/CD 集成: 提供 REST API,易于与 Jenkins/GitLab CI 集成。
- 智能运维与监控
- 状态感知: 实时追踪作业状态(Created, Running, Failed, Finished 等)。
- 自动重启: 配置失败重试策略,异常时自动恢复。
- Checkpoint/Savepoint 管理: 可视化触发、查看和从指定 Savepoint 恢复。
- 告警通知: 支持邮件、钉钉、企业微信、Webhook 等多种告警渠道。
- SQL 在线开发
- 提供 Web IDE 进行 Flink SQL 编写。
- 支持语法高亮、智能提示、SQL 校验和血缘分析。
- 资源与配置管理
- 统一管理 Flink Home、Maven 仓库、系统参数。
- 支持动态参数注入,区分开发/测试/生产环境配置。
二、 典型使用场景
| 场景 | 描述 | StreamPark 价值 |
|---|---|---|
| 实时数仓 ETL | Kafka → Flink → Doris/StarRocks/ClickHouse | 简化 SQL 作业管理,统一调度数百个 ETL 任务 |
| 实时监控大屏 | 业务指标实时聚合计算 | 快速部署、秒级状态反馈、故障自动恢复 |
| CDC 数据同步 | MySQL/PG Binlog → 下游存储 | 管理复杂的 CDC Connector 配置和断点续传 |
| 算法模型推理 | 实时特征工程 + 模型预测 | 支持自定义 Jar 包部署,管理模型文件版本 |
| 多租户平台 | 企业内部大数据平台 | 权限隔离、资源配额、统一入口降低使用门槛 |
三、 详细使用步骤示例(以 Flink SQL 作业为例)
前置准备
bash
# 1. 克隆并启动 StreamPark (Docker 方式最简)
git clone https://github.com/apache/incubator-streampark.git
cd incubator-streampark/docker
docker-compose up -d
# 2. 访问 Web UI
# 默认地址: http://localhost:10000
# 默认账号: admin / streampark
Step 1: 配置 Flink 环境
进入 Setting → Flink Home,添加你的 Flink 安装路径:
Flink Name: flink-1.17
Flink Home: /opt/flink-1.17.1 # 容器内或主机路径
Step 2: 创建 Flink SQL 应用
进入 StreamPark → Application → Add New
| 配置项 | 示例值 | 说明 |
|---|---|---|
| Development Mode | Custom Code / Flink SQL | 选择 Flink SQL |
| Execution Mode | remote / yarn-application | 根据集群选择 |
| Flink Version | flink-1.17 | 关联已配置的 Flink |
| Application Name | kafka-to-doris-demo | 应用名称 |
Step 3: 编写 SQL 代码
在 SQL 编辑器中输入:
sql
-- 源表定义
CREATE TABLE source_kafka (
user_id BIGINT,
item_id BIGINT,
behavior STRING,
ts TIMESTAMP(3),
WATERMARK FOR ts AS ts - INTERVAL '5' SECOND
) WITH (
'connector' = 'kafka',
'topic' = 'user_behavior',
'properties.bootstrap.servers' = 'kafka:9092',
'format' = 'json',
'scan.startup.mode' = 'latest-offset'
);
-- 目标表定义
CREATE TABLE sink_doris (
window_start TIMESTAMP(3),
window_end TIMESTAMP(3),
behavior STRING,
cnt BIGINT
) WITH (
'connector' = 'doris',
'fenodes' = 'doris-fe:8030',
'table.identifier' = 'db.behavior_summary',
'username' = 'root',
'password' = ''
);
-- 核心逻辑
INSERT INTO sink_doris
SELECT
TUMBLE_START(ts, INTERVAL '1' MINUTE) AS window_start,
TUMBLE_END(ts, INTERVAL '1' MINUTE) AS window_end,
behavior,
COUNT(*) AS cnt
FROM source_kafka
GROUP BY TUMBLE(ts, INTERVAL '1' MINUTE), behavior;
Step 4: 配置运行参数
yaml
# Parallelism & Checkpoint 配置
parallelism.default: 2
execution.checkpointing.interval: 30s
execution.checkpointing.mode: EXACTLY_ONCE
state.backend: hashmap
state.checkpoints.dir: hdfs:///streampark/checkpoints
state.savepoints.dir: hdfs:///streampark/savepoints
# 自定义参数(可在SQL中通过 ${param} 引用)
kafka.brokers: kafka:9092
Step 5: 构建与启动
- 点击 Build → 平台自动校验 SQL 语法并解析依赖
- 点击 Start → 选择是否从 Savepoint 恢复
- 观察 Flame Graph / Timeline 确认作业进入 RUNNING 状态
Step 6: 运维操作
- 触发 Savepoint: Application 列表 → 操作栏 → Savepoint → Trigger
- 查看日志: 点击应用名 → Log 标签页 → 实时查看 TM/JM 日志
- 修改 SQL: Stop (with savepoint) → Edit SQL → Build → Start (from savepoint)
- 告警配置: Setting → Alert → 添加钉钉/邮件组 → 绑定到应用
四、 最佳实践建议
- 生产环境务必开启 Checkpoint ,并配置
state.checkpoints.dir到 HDFS/S3 - Stop 时选择 "with savepoint",避免数据丢失
- SQL 作业优先使用 Catalog 管理表元数据,避免重复 DDL
- K8s 部署推荐使用 Native 模式,获得更好的资源弹性
- 定期清理过期 Checkpoint/Savepoint,防止存储膨胀
- 利用 Pipeline 功能 将多个关联 SQL 合并为一个作业,减少资源开销