文章目录
- [01 引言](#01 引言)
- [02 Flink是什么](#02 Flink是什么)
-
- [2.1 Flink简介](#2.1 Flink简介)
- [2.2 Flink架构](#2.2 Flink架构)
- [2.3 Flink应用场景](#2.3 Flink应用场景)
- [2.4 Flink运维](#2.4 Flink运维)
- [03 Flink环境搭建](#03 Flink环境搭建)
-
- [3.1 Flink服务端环境搭建](#3.1 Flink服务端环境搭建)
- [3.2 Flink部署模式](#3.2 Flink部署模式)
- [3.3 Flink开发环境搭建](#3.3 Flink开发环境搭建)
- [04 Flink数据类型以及序列化](#04 Flink数据类型以及序列化)
-
- [4.1 数据类型](#4.1 数据类型)
- [4.2 数据序列化](#4.2 数据序列化)
- [05 Flink DataStream API](#05 Flink DataStream API)
-
- [5.1 执行模式](#5.1 执行模式)
- [5.2 事件时间Watermark](#5.2 事件时间Watermark)
- [5.3 自定义Functions](#5.3 自定义Functions)
- [5.4 状态与容错](#5.4 状态与容错)
- [5.5 应用程序参数处理](#5.5 应用程序参数处理)
- [5.6 ParameterTool工具读取配置](#5.6 ParameterTool工具读取配置)
- [5.7 flink 程序中使用参数](#5.7 flink 程序中使用参数)
- [5.8 Java Lambda 表达式](#5.8 Java Lambda 表达式)
- [5.9 执行配置](#5.9 执行配置)
- [06 Flink数据源Source](#06 Flink数据源Source)
-
- [6.1 核心组件](#6.1 核心组件)
- [6.2 **流处理和批处理的统一**](#6.2 流处理和批处理的统一)
- [6.3 Data Source API](#6.3 Data Source API)
- [6.4 SplitReader API](#6.4 SplitReader API)
- [6.5 事件时间和水印](#6.5 事件时间和水印)
- [07 Flink窗口函数](#07 Flink窗口函数)
-
- [7.1 窗口简介](#7.1 窗口简介)
- [7.2 窗口生命周期](#7.2 窗口生命周期)
- [7.3 窗口函数](#7.3 窗口函数)
- [7.4 Triggers 触发器](#7.4 Triggers 触发器)
- [7.5 Evictors数据剔除器](#7.5 Evictors数据剔除器)
- [7.6 数据延迟处理](#7.6 数据延迟处理)
- [7.7 窗口数据结果获取](#7.7 窗口数据结果获取)
- [7.8 多个数据流合并](#7.8 多个数据流合并)
- [7.9 Process Function 函数](#7.9 Process Function 函数)
- [7.10 I/O异步操作](#7.10 I/O异步操作)
- [08 Table API & SQL](#08 Table API & SQL)
-
- [8.1 简介](#8.1 简介)
- [8.2 通用api](#8.2 通用api)
- [8.3 流式概念](#8.3 流式概念)
- [8.4 流式聚合](#8.4 流式聚合)
- [8.5 数据类型](#8.5 数据类型)
- [8.6 时区](#8.6 时区)
- [8.7 函数](#8.7 函数)
- [8.8 存储过程](#8.8 存储过程)
- [8.9 模块](#8.9 模块)
- [8.10 Catalogs](#8.10 Catalogs)
- [8.11 Flink JDBC Driver](#8.11 Flink JDBC Driver)
- [8.12 SQL客户端](#8.12 SQL客户端)
- [09 Table API](#09 Table API)
- [10 SQL](#10 SQL)
- [11 DataStream连接器](#11 DataStream连接器)
-
- [11.1 数据格式](#11.1 数据格式)
- [11.2 Data Source 和 Sink 的容错保证](#11.2 Data Source 和 Sink 的容错保证)
- [11.3 支持的数据连接器](#11.3 支持的数据连接器)
- [12 Table API 连接器](#12 Table API 连接器)
- [13 Deployment部署](#13 Deployment部署)
-
- [13.1 java兼容性](#13.1 java兼容性)
- [13.2 部署方式](#13.2 部署方式)
- [13.3 配置参数](#13.3 配置参数)
- [13.4 内存配置](#13.4 内存配置)
- [13.5 弹性扩缩容](#13.5 弹性扩缩容)
- [13.6 命令行界面](#13.6 命令行界面)
- [13.7 细粒度资源管理](#13.7 细粒度资源管理)
- [13.8 File Systems](#13.8 File Systems)
- [13.9 高可用](#13.9 高可用)
- [13.10 系统指标采集导出](#13.10 系统指标采集导出)
- [13.11 安全认证](#13.11 安全认证)
- [13.12 拓展](#13.12 拓展)
- [14 Flink debugging 调试](#14 Flink debugging 调试)
-
- 14.1调试窗口与事件时间
- [14.2 调试类加载](#14.2 调试类加载)
- [14.3 火焰图](#14.3 火焰图)
- [14.4 应用程序分析与调试](#14.4 应用程序分析与调试)
- [15 Flink监控](#15 Flink监控)
-
- [15.1 快照监控](#15.1 快照监控)
- [15.2 监控背压](#15.2 监控背压)
- [16 Flink图API](#16 Flink图API)
- [17 Flink机器学习](#17 Flink机器学习)
-
- [17.1 简介概述](#17.1 简介概述)
- [17.2 机器学习算子](#17.2 机器学习算子)
- [17.3 数据预处理](#17.3 数据预处理)
- [17.4 推荐算法](#17.4 推荐算法)
- [17.5 机器学习管道](#17.5 机器学习管道)
- [18 Flink复杂事件处理](#18 Flink复杂事件处理)
-
- [18.1 简介概述](#18.1 简介概述)
- [18.2 Patterm API 使用](#18.2 Patterm API 使用)
- [18.3 事件如何获取](#18.3 事件如何获取)
- [18.4 应用实例展示](#18.4 应用实例展示)
01 引言
1.最近工作中接触到相关的风控项目,里面用到Flink组件做相关的一些流数据或批数据处理,接触后发现确实大数据组件框架比之传统应用开发,部署,运维等方面有很大的优势;
2.工作中遇到不少问题,可惜当时没有形成文档记录的习惯,不少宝贵的经验久而久之就忘了,所以开个**博客专栏《极数系列》**记录Flink以及大数据相关笔记,也是时刻提醒自己需要不断学习。
3.学习任何框架之前还是需要对这个框架有些许了解,才好快速入门以及给后续进阶打基础,参考Flink官网最新的1.18版本文档,整理了下Flink框架相关的一些知识体系与架构,诸君共勉!
4.相关网址:
Flink官网:https://flink.apache.org/
Flink版本:https://flink.apache.org/blog/
Flink文档:https://ci.apache.org/projects/flink/flink-docs-release-1.12/
Flink代码库:https://github.com/apache/flink
02 Flink是什么
2.1 Flink简介
2.2 Flink架构
1.无边界和有边界的数据
2.应用程序部署选择
3.应用程序运行模式
4.内存状态
2.3 Flink应用场景
1.事件驱动型应用
2.数据分析应用
3.数据管道应用
2.4 Flink运维
1.怎么保证7 * 24小时稳定运行?
2.怎么升级、迁移、暂停、恢复应用?
03 Flink环境搭建
3.1 Flink服务端环境搭建
1.Linux环境搭建
2.docker容器化环境搭建
3.2 Flink部署模式
1.本地单机模式部署
2.Standalone独立集群部署
3.HA高可用集群部署
4.Yarn部署
3.3 Flink开发环境搭建
1.idea开发工具配置
2.Flink依赖引入
3.maven使用 shade 插件构建包
4.Flink高级配置
04 Flink数据类型以及序列化
4.1 数据类型
1.Java元组和Scala案例类
2.Java POJO
3.原生数据类型
4.常规类型
5.数据值
6.Hadoop数据类型
7.特殊类型
4.2 数据序列化
1.状态数据结构升级
2.自定义状态数据序列化
3.自定义序列化器
05 Flink DataStream API
5.1 执行模式
1.流模式
2.批模式
5.2 事件时间Watermark
1.Watermark简介
2.Watermark策略
5.3 自定义Functions
1.如何自定义?
2.定制累加器和计数器
5.4 状态与容错
1.状态计算
2.广播状态模
3.快照Checkpointing
4.状态管理器
5.5 应用程序参数处理
5.6 ParameterTool工具读取配置
5.7 flink 程序中使用参数
5.8 Java Lambda 表达式
5.9 执行配置
06 Flink数据源Source
6.1 核心组件
1.分片
2.源阅读器
3.分片枚举器
6.2 流处理和批处理的统一
1.有界File Source
2.无界File Source
6.3 Data Source API
1.SplitEnumerator
2.SourceReader
3.Source 使用方法
6.4 SplitReader API
1.SplitReader
2.SourceReaderBase
3.SplitFetcherManager
6.5 事件时间和水印
1.事件时间戳
2.水印生成
07 Flink窗口函数
7.1 窗口简介
7.2 窗口生命周期
1.分组函数
2.窗口分配器
- 滚动窗口
- 滑动窗口
- 会话窗口
- 全局窗口
7.3 窗口函数
1.ReduceFunction 函数
2.AggregateFunction 函数
3.ProcessWindowFunction 函数
4.增量聚合ProcessWindowFunction 函数
5.在 ProcessWindowFunction 中使用 per-window state
6.WindowFunction(已过时)
7.4 Triggers 触发器
1.触发与清除(Fire & Purge)
2.WindowAssigner 默认的 Triggers
3.内置 Triggers 和自定义 Triggers
7.5 Evictors数据剔除器
- CountEvictor
- DeltaEvictor
- TimeEvictor
7.6 数据延迟处理
1.旁路输出
2.建议
7.7 窗口数据结果获取
1.连续窗口操作
2.水印与窗口的交互
7.8 多个数据流合并
1.滚动合并
2.滑动合并
3.会话合并
4.Interval Join间隔合并
7.9 Process Function 函数
7.10 I/O异步操作
1.异步操作简介
2.超时处理
3.结果顺序
4.事件时间
5.容错保证
6.重试支持
7.实现方案
8.警告&注意事项
08 Table API & SQL
8.1 简介
1.什么是Table API ?可以做什么?
2.什么是Table SQL?可以做什么?
8.2 通用api
1.Table API 和 SQL 程序的结构
2.创建 TableEnvironment
3.在 Catalog 中创建表
4.查询表
5.输出表
6.翻译与执行查询
7.查询优化
8.解释表
8.3 流式概念
1.什么是流式概念?
2.动态表
3.流上的确定性
4.时间属性
5.时态表
6.Temporal Table Function 函数
8.4 流式聚合
1.MiniBatch 聚合
2.Local-Global 聚合
3.拆分 distinct 聚合
4.在 distinct 聚合上使用 FILTER 修饰符
8.5 数据类型
Data Type | Remarks for Data Type |
---|---|
CHAR |
|
VARCHAR |
|
STRING |
|
BOOLEAN |
|
BINARY |
|
VARBINARY |
|
BYTES |
|
DECIMAL |
Supports fixed precision and scale. |
TINYINT |
|
SMALLINT |
|
INTEGER |
|
BIGINT |
|
FLOAT |
|
DOUBLE |
|
DATE |
|
TIME |
Supports only a precision of 0 . |
TIMESTAMP |
|
TIMESTAMP_LTZ |
|
INTERVAL |
Supports only interval of MONTH and SECOND(3) . |
ARRAY |
|
MULTISET |
|
MAP |
|
ROW |
|
RAW |
|
Structured types | Only exposed in user-defined functions yet. |
8.6 时区
1.TIMESTAMP vs TIMESTAMP_LTZ
2.时区的作用
3.时间属性和时区
4.夏令时支持
8.7 函数
1.函数
2.系统内置函数
3.自定义函数
8.8 存储过程
1.存储过程类
2.Call方法
3.类型推导
8.9 模块
1.模块类型
2.模块生命周期
3.命名空间
4.如何加载,卸载和使用模块
8.10 Catalogs
1.Catalogs类型
2.创建于注册到Catalog
3.Catalog API
4.Table API 与 SQL Client 如何操作?
5.Catalog Modification Listener
6.Catalog Store 持久化
8.11 Flink JDBC Driver
1.依赖
2.JDBC POOL连接池
3.支持语言
8.12 SQL客户端
1.简介
2.安装部署
3.配置
8.13 SQL gateway
1.简介
2.如何启动与执行作业
3.REST Endpoint 交互
4.HiveServer2 Endpoint 交互
09 Table API
1.数据查询&过滤
2.列操作
3.分租聚合操作
4.联表操作
5.排序、偏移量,限制操作
6.插入
7.窗口分组操作
8.Over Windows
9.基于行生成多列输出的操作
10 SQL
1.简介
2.Flink sql 部署安装
3.Queries 查询
4.CREATE 语句
5.DROP 语句
6.ALTER 语句
7.INSERT 语句
8.ANALYZE 语句
9.DESCRIBE 语句
10.TRUNCATE 语句
11.EXPLAIN 语句
12.USE 语句
13.SHOW 语句
14.LOAD 语句
15.UNLOAD 语句
16.SET 语句
17.RESET 语句
18.JAR 语句
19.JOB 语句
20.UPDATE 语句
21.DELETE 语句
22.CALL 语句
11 DataStream连接器
11.1 数据格式
1.Avro
3.Hadoop
4.Parquet
6.JSON
7.CSV
11.2 Data Source 和 Sink 的容错保证
11.3 支持的数据连接器
1.kafka数据连接器
2.Cassandra数据连接器
3.Cassandra数据连接器
4.DynamoDB 数据连接器
5.elasticsearch 数据连接器
6.Firehose 数据连接器
7.亚马逊 Kinesis 数据流 SQL
8.MongoDB 数据连接器
9.Opensearch 数据连接器
10.文件系统
11.RabbitMQ 连接器
12.Google Cloud PubSub
13.Hybrid 连接器
14.Apache Pulsar 连接器
15.JDBC 数据库连接器
12 Table API 连接器
13 Deployment部署
13.1 java兼容性
1.java 8
2.java 11
3.java 17
13.2 部署方式
1.Standalone
3.YARN
13.3 配置参数
13.4 内存配置
13.5 弹性扩缩容
13.6 命令行界面
13.7 细粒度资源管理
13.8 File Systems
13.9 高可用
13.10 系统指标采集导出
13.11 安全认证
13.12 拓展
14 Flink debugging 调试
14.1调试窗口与事件时间
1.监控当前时间
2.处理散乱的事件时间
14.2 调试类加载
1.简介概述
2.倒置类加载
3.避免用户代码的动态类加载
4.手动进行用户代码的类加载
5.X cannot be cast to X 异常
6.卸载用户代码中动态加载的类
7.通过maven-shade-plugin解决与Flink的依赖冲突
14.3 火焰图
14.4 应用程序分析与调试
1.使用 Java Flight Recorder 分析
2.使用 JITWatch 分析
3.分析内存溢出(OOM)问题
4.分析内存和垃圾回收行为
15 Flink监控
15.1 快照监控
1.概览(Overview)选项卡
2.历史记录(History)选项卡
3.摘要信息(Summary)选项卡
4.配置信息(Configuration)选项卡
5.Checkpoint 详细信息
15.2 监控背压
16 Flink图API
16.1 简介概述
16.2 Graph API
16.3 图迭代器
16.4 图生成器