Flink-SQL管理工具flink-streaming-platform-web部署

本文介绍了如何部署flink-streaming-platform-web并结合flink、kafka实现数据处理。详细步骤包括软件版本选择、依赖jar包配置、flink和平台的启动、系统及任务配置,以及观察运行结果和数据变化。

目录

1. 概述

2. 软件版本

2.1 软件版本列表

2.2 添加第3放依赖jar包的方法

3. 启动

4.1 登录页面

4.2 系统配置

4.3 任务配置

5. 观察运行结果

5.1 观察任务提交结果

5.2 观察数据变化

5.3 在flink的ui上观察任务

6. 参考资料


1. 概述

这里部署flink-streaming-platform-web,并跑通kafka->flink sql -> mysql的一个样例,实时从kafka中读取json字符串,经过ETL操作,将数据汇总后写入mysql sink

 -- ETL 
INSERT INTO flink_web_sample.sync_test_2
SELECT day_time,SUM(amnount) AS total_gmv
FROM flink_test_3
GROUP BY day_time;

 


2. 软件版本

2.1 软件版本列表

  • flink-streaming-platform-web.tar.gz 

flink-streaming-platform-web(20210202).tar.gz  (下载地址

  • flink
你问得非常好:**Flink部署流程真的这么麻烦吗?能不能自己编译 Flink 1.17.2 中所需的 MySQL CDC 和 Elasticsearch 相关的 JAR,一劳永逸地解决依赖问题?** 我们来 **直击痛点、层层拆解**。 --- ## ✅ 简短回答: > ❌ **你不应该也不需要“自己编译整个 Flink”来获取 MySQL/ES 的 connector JAR。** > > ✅ 但你可以通过 **Maven 构建独立项目 + 打包 fat jar** 的方式,**一键生成包含所有所需功能(MySQL CDC + ES Sink)的可运行作业包**,完全不需要手动找 JAR 或修改 Flink 发行版。 > > 🚫 不推荐重新编译 Flink 发行版,因为: > - 它不解决根本问题 > - 成本高、易出错 > - 实际上也没必要 --- ## 🔍 为什么“编译 Flink”不是正确方向? ### 误解澄清:Flink 发行版 ≠ 功能集合 Apache Flink 的官方发行版(如 `flink-1.17.2-bin-scala_2.12.tgz`)是一个**通用流计算框架**,它并不内置: - 数据源连接器(如 MySQL CDC) - 外部系统输出(如 Elasticsearch) 这些是 **插件式组件(connectors)**,设计上就是 **按需引入** 的。 👉 就像你不会为了用 Chrome 浏览器看视频而去重新编译 Chrome 内核一样,你也不该为了加个 MySQL 连接器去重新编译 Flink--- ## ✅ 正确思路:把你的同步逻辑打包成一个“自带轮子的汽车” 与其修改 Flink 引擎本身,不如写一个 **Flink 应用程序(Job)**,然后用 Maven 把所有依赖打进去,变成一个 **可提交的 fat jar**。 这样你就实现了: - ✅ 不用手动下载任何 JAR - ✅ 所有依赖自动管理 - ✅ 提交一个文件即可运行 - ✅ 可重复构建、易于维护 --- ## 💡 推荐做法:使用 Maven 构建一个带完整依赖的 Flink Job 工程(适用于 Flink 1.17.2) 下面是一个最小可运行示例,支持: - MySQL 8.0 CDC 同步 - 写入 Elasticsearch 7.x - 使用 Flink 1.17.2 - JDK8 兼容 --- ### ✅ `pom.xml`(Flink 1.17.2 + CDC 2.3.2 + ES7) ```xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelModelVersion> <groupId>com.example</groupId> <artifactId>flink-mysql-to-es</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <flink.version>1.17.2</flink.version> <java.version>1.8</java.version> <maven.compiler.source>${java.version}</maven.compiler.source> <maven.compiler.target>${java.version}</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- Flink Core --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>${flink.version}</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java</artifactId> <version>${flink.version}</version> </dependency> <!-- Flink Table API & Planner --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-table-api-java</artifactId> <version>${flink.version}</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-table-planner-loader</artifactId> <version>${flink.version}</version> </dependency> <!-- MySQL CDC Connector (Ververica) --> <dependency> <groupId>com.ververica</groupId> <artifactId>flink-sql-connector-mysql-cdc</artifactId> <version>2.3.2</version> </dependency> <!-- Elasticsearch 7 Sink --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-elasticsearch7</artifactId> <version>${flink.version}</version> </dependency> <!-- MySQL Driver --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> <!-- Shade Plugin: 打包为 fat jar --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.example.FlinkSyncJob</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> </project> ``` --- ### ✅ `src/main/java/com/example/FlinkSyncJob.java` ```java package com.example; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.table.api.bridge.java.StreamTableEnvironment; public class FlinkSyncJob { public static void main(String[] args) throws Exception { StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env); // 设置 checkpoint(用于 exactly-once) env.enableCheckpointing(5000); // 创建 MySQL 源表 String mysqlSource = "" + "CREATE TABLE mysql_users (" + " id INT PRIMARY KEY NOT ENFORCED," + " name STRING," + " age INT," + " email STRING," + " update_time TIMESTAMP(3)" + ") WITH (" + " 'connector' = 'mysql-cdc'," + " 'hostname' = 'localhost'," + " 'port' = '3306'," + " 'database-name' = 'test_db'," + " 'table-name' = 'users'," + " 'username' = 'flinkuser'," + " 'password' = 'flinkpw'," + " 'server-time-zone' = 'Asia/Shanghai'," + " 'ssl-mode' = 'disabled'" + ")"; // 创建 ES 目标表 String esSink = "" + "CREATE TABLE es_users (" + " id INT," + " name STRING," + " age INT," + " email STRING," + " update_time TIMESTAMP(3)," + " PRIMARY KEY (id) NOT ENFORCED" + ") WITH (" + " 'connector' = 'elasticsearch-7'," + " 'hosts' = 'http://localhost:9200'," + " 'index' = 'users_index'" + ")"; tableEnv.executeSql(mysqlSource); tableEnv.executeSql(esSink); tableEnv.executeSql("INSERT INTO es_users SELECT * FROM mysql_users"); } } ``` --- ### ✅ 构建命令(一键生成完整 JAR) ```bash mvn clean package ``` 生成的 JAR: ``` target/flink-mysql-to-es-1.0-SNAPSHOT.jar ``` 这个 JAR 包含了: - Flink 运行时 API - MySQL CDC(含 Debezium) - Elasticsearch 7 Sink - MySQL JDBC Driver ✅ **全部依赖都在里面,无需额外放任何 JAR 到 `lib/` 目录!** --- ### ✅ 提交到 Flink 集群运行 ```bash # 启动集群(如果没启动) /path/to/flink-1.17.2/bin/start-cluster.sh # 提交任务 /path/to/flink-1.17.2/bin/flink run -c com.example.FlinkSyncJob ./target/flink-mysql-to-es-1.0-SNAPSHOT.jar ``` 🎉 完成!从此告别手动找 JAR 的时代。 --- ## ✅ 总结:Flink 部署到底麻不麻烦? | 场景 | 是否麻烦 | 建议 | |------|----------|------| | 手动下载 JAR → 放 `lib/` → 调试冲突 | ⛔ 很麻烦 | 不推荐 | | 自己编译 Flink 发行版 | ⛔ 极其麻烦且没必要 | 绝对不要做 | | 用 Maven 构建 fat jar 应用 | ✅ 简单高效 | 强烈推荐 ✅ | | 使用 Docker Compose 一键环境 | ✅ 更高级方案 | 后续可考虑 | --- ## 🧩 额外建议:如何简化 Flink 部署体验? 1. **使用 Flink SQL Gateway + REST API**(未来趋势) 2. **使用 Ververica Platform / Flink Kubernetes Operator**(生产级) 3. **封装脚本一键部署**(开发测试可用) ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值