日记"/>
Flink日记
Flink简介
Flink是什么
为什么选择Flink
哪些行业需要处理流数据
电商和市场营销
物联网(IoT)
电信业
银行和金融业
传统数据处理架构
事务处理(OLTP)
分析处理(OLAP)
有状态的流式处理
流处理的演变
lambda架构
Flink
Flink的主要特点
事件驱动(Event-driven)
基于流的世界观
分层API
其他特点
Flink vs Spark Streaming
流(stream)和微批(micro-batching)
数据模型
运行时架构
快速上手
搭建maven工程
pom文件
添加scala框架和scala文件夹
批处理wordcount
流处理wordcount
打印顺序
并行度及编号
动态传参方式
Flink部署
Standalone模式
安装
解压编译好的包
修改配置文件conf/flink-conf.yaml
修改conf/slaves
分发配置好的Flink
启动
提交任务
前端页面提交
后台命令提交
Yarn模式
Flink on Yarn
Session Cluster
启动hadoop集群
启动yarn-session
提交job
前端页面查看
取消yarn-session
Per Job Cluster
启动hadoop集群
直接执行job
Kubernetes部署
搭建k8s集群
配置各组件的yaml文件
启动Flink Session Cluster
访问Flink UI页面
FLINK运行时架构
运行时组件
作业管理器(JobManager)
任务管理器(TaskManager)
资源管理器(ResourceManager)
分发器(Dispatcher)
任务提交流程
通用流程
YARN提交流程(per-job)
per-job
yarn-session
任务调度原理
TaskManager和Slots
不共享slot
共享slot
并行详解
程序和数据流(DataFlow)
图片1
图片2
执行图(ExecutionGraph)
图片
并行度(Parallelism)
图片1
图片2
任务链(Operator Chains)
扩展
slot共享组
拒绝合并
状态编程和容错机制
状态管理
算子状态(Operator State)
列表状态(List state)
联合列表状态(Union list state)
广播状态(Broadcast state)
键控状态(Keyed State)
值状态(Value state)
列表状态(List state)
映射状态(Map state)
聚合状态(Reducing state & Aggregating State)
状态后端(State Backends)
MemoryStateBackend
FsStateBackend
RocksDBStateBackend
容错机制
一致性检查点(Checkpoints)
从检查点恢复状态
检查点的实现算法
Flink 检查点算法
Savepoint
重启策略
fixedDelayRestart
failureRateRestart
fallbackRestart
noRestart
状态一致性
分类
AT-MOST-ONCE(最多一次)
AT-LEAST-ONCE(至少一次)
EXACTLY-ONCE(精确一次)
一致性检查点
端到端状态一致性
端到端exactly-once
内部保证
source 端
sink 端
幂等写入
事务写入
预写日志
两阶段提交
不同 Source 和 Sink 的一致性保证
图片
Flink+Kafka 端到端状态一致性的保证
ProcessFunction API(底层API)
KeyedProcessFunction
TimerService 和 定时器(Timers)
侧输出流
CoProcessFunction
时间语义与Watermark
时间语义
Event Time
Ingestion Time
Processing Time
EventTime的引入
Watermark
基本概念
Watermark的引入
Window API
Window
Window概述
Window类型
时间窗口
滚动时间窗口
图片
滑动时间窗口
图片
会话窗口
图片
计数窗口
滚动计数窗口
滑动计数窗口
Window API
TimeWindow
滚动时间窗口
滑动时间窗口
会话窗口
CountWindow
滚动计数窗口
滑动计数窗口
window function
增量聚合函数
全窗口函数
其他可选API
trigger
evictor
allowedLateness
sideOutputLateData
getSideOutput
API总览
图片
FLINK流处理API
Environment
getExecutionEnvironment
批:val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment
流:val env = StreamExecutionEnvironment.getExecutionEnvironment
createLocalEnvironment
val env = StreamExecutionEnvironment.createLocalEnvironment(1)
createRemoteEnvironment
val env = ExecutionEnvironment.createRemoteEnvironment("jobmanage-hostname", 6123,"YOURPATH//wordcount.jar")
Source
从集合读取数据
从文件读取数据
以kafka消息队列的数据作为来源
自定义source
Transform
map
flatMap
Filter
KeyBy
滚动聚合算子
Reduce
Split和Select
Connect和CoMap
Union
支持的数据类型
基础数据类型
Java和Scala元组(Tuples)
Scala样例类(case class)
Java简单对象(POJOs)
其他
实现UDF函数(Arrays, Lists, Maps, Enums等)
函数类(Function Classes)
匿名函数(Lambda Functions)
富函数(Rich Functions)
Sink
Kafka
Redis
ElasticSearch
JDBC自定义sink
更多推荐
Flink日记
发布评论