# flink-learn **Repository Path**: dahuajia/flink-learn ## Basic Information - **Project Name**: flink-learn - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-08-24 - **Last Updated**: 2024-12-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: flink, 尚硅谷, 学习笔记 ## README # spark-learn > 尚硅谷Flink 1.17学习代码,在代码课件的基础上补充了一些注释。 Maven项目,非Spring项目。 > 在学习Flink的时候,其很多方法、理念和实现逻辑与其他流行的框架是相似的,所以很多概念理解起来比较容易。 > 需要注意的是,Flink始终是一个流处理的框架,所有的功能都是针对流处理的,而不是批处理的。因此,不能用于批处理的惯性思维来读Flink的代码逻辑。 ### 代码模块及文件夹介绍 > 序号就是学习的先后顺序。 com.atguigu ├─ wordCount 1 数据读取方式介绍,算子介绍,并行度设置 ├─ env 2 环境的创建 ├─ bean 3 水位线实体类,为练习方便,定义的数据模型 ├─ source 4 数据源的创建,数据读取方式说明 ├─ transform 5 DataStream API之转换算子 ├─ aggregate 6 DataStream API之聚合算子 ├─ functions 7 用户自定义函数(函数类与富函数类)、转换算子接口实现类 ├─ partition 8 物理分区算子 ├─ shunt 9 数据分流介绍 ├─ combine 10 基本合流操作 ├─ sink 11 输出算子操作 ├─ window 12 窗口及窗口函数操作 ├─ watermark 13 水位线操作 ├─ process 14 处理函数(ProcessFunction) ├─ state 15 状态操作 ├─ checkpoint 16 检查点 └─ sql 17 Flink SQL操作 ### 课件 https://www.yuque.com/guomingde/pl7zdu/aqbnyxisof96b4ce ### 安装Netcat 在做练习时,需要使用netcat,因此需要先安装netcat。安装及使用命令如下: ```shell ### CentOS安装 sudo yum install nc ### Ubuntu安装 sudo yum install netcat ### 监听指定端口,并可以网指定端口发送数据 nc -lk 7777 ``` > Windows安装:https://blog.csdn.net/muriyue6/article/details/107127217 > 用法:nc -l -p 7777 ### Apache Flink Dashboard http://localhost:8081/ ### Flink中的表和MySQL中的表的区别 Flink中的表和MySQL中的表虽然在表的概念上有一些相似之处,但在实现和使用上存在许多关键的差异。以下是一些主要的区别: **1. 数据模型** MySQL 表:MySQL 是关系型数据库,使用传统的 ACID(原子性、一致性、隔离性、持久性)事务模型,主要用于存储持久化的、结构化的数据。表的数据通常是静态的,直到插入、更新或删除操作执行时才发生变化。 Flink 表:Flink 的表属于流式处理的范畴,设计上是面向实时数据流的。Flink 提供的表通常用来处理持续不断流入的数据,它更注重对数据的流式操作和窗口计算。Flink 表可以是流式数据(StreamTable)或者批量数据(BatchTable)的映射,且能够与多种外部系统(如 Kafka、文件、数据库等)进行实时交互。 **2. 数据存储方式** MySQL 表:数据存储在磁盘中,是持久化的。每当数据发生变化时,都会进行写入操作,数据可以被查询、更新、删除,且这些操作通常具有事务保证。 Flink 表:Flink 表本身并不持久化数据,而是通过与外部系统(如 Kafka、HDFS、数据库等)连接来实现数据的读写。Flink 提供了 Connector 来支持与各种外部存储的交互,表的数据可以是暂时性的,实时流动的。 **3. 查询和处理方式** MySQL 表:MySQL 主要用于执行传统的 SQL 查询,支持事务、聚合、连接等操作。数据查询通常是批量操作,针对存储在数据库中的静态数据集进行检索。 Flink 表:Flink 支持类似 SQL 的查询语言(Flink SQL),但查询通常针对流式数据进行,支持实时处理。Flink 提供窗口(windowing)、时间语义(事件时间、处理时间)、动态表和流式处理特性,允许对流数据执行复杂的实时计算。 **4. 时间语义** MySQL 表:MySQL 是基于静态数据的关系型数据库,不涉及时间语义或事件驱动的计算。时间通常作为一个字段存在,主要用于记录数据的插入时间等。 Flink 表:Flink 支持丰富的时间语义,分为 事件时间、处理时间 和 摄取时间。这使得 Flink 在处理流数据时能够基于时间窗口进行实时计算和流处理。 **5. 表的生命周期** MySQL 表:MySQL 中的表是静态的,表的数据在没有手动修改(插入、删除、更新)时会保持不变。数据通常被持久化,并可以在查询时随时访问。 Flink 表:Flink 中的表更多是临时性的,依赖于流数据的到达。例如,Flink 的表通常不会直接存储数据,而是作为实时流数据的窗口和视图存在。流数据不断变化,表中的内容随流动数据的输入而变化。 **6. 数据操作** MySQL 表:MySQL 支持传统的增、删、改、查(CRUD)操作。数据是事务性的,能够保证一致性和持久性。 Flink 表:Flink 的表支持流式操作,包括过滤、聚合、连接等。它支持流式计算框架中的常见操作,如 Tumble Window、Session Window、Join、Group By 等操作。 **7. 容错性与一致性** MySQL 表:MySQL 提供事务处理,能够保证 ACID 特性,即数据一致性和持久性。如果一个事务成功完成,数据将被永久保存;如果事务失败,所有操作将回滚。 Flink 表:Flink 设计用于流式计算,强调在分布式环境中的容错性。Flink 提供“精确一次”(exactly-once)语义,即使在任务失败后,Flink 也能够恢复数据并确保一致性。 **8. 查询优化** MySQL 表:MySQL 提供索引、查询缓存和优化器等手段来加速查询,主要针对静态数据的查询优化。 Flink 表:Flink 的查询优化器专门针对流式数据优化,能够智能选择执行计划,优化跨窗口的聚合、分区和连接操作等流式计算场景。 **9. 扩展性** MySQL 表:MySQL 是一个关系型数据库管理系统,扩展性主要依赖于分区、复制、负载均衡等手段。对于大规模数据处理,可能需要额外的架构支持(如分布式数据库)。 Flink 表:Flink 是一个分布式流处理框架,天生具备高可扩展性。它支持大规模的流处理,能够处理百万级甚至更大规模的实时数据流,且能够横向扩展。 **总结** MySQL 表 主要用于存储和查询静态的关系型数据,支持传统的 SQL 查询和事务处理。 Flink 表 用于实时流式数据处理,强调事件驱动的计算和时间语义,支持分布式流式计算。