Flink简介
是什么?为什么要用?哪些要用流数据?架构演变Flink特点Flink和Spark Streaming的区别 部署
配置Standalone模式Yarn模式
Session-cluster模式Per-Job-Cluster模式 Flink运行时的组件
任务提交流程任务调度原理专业术语
并行度Slots
Flink简介 是什么?Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数
据流进行状态计算。
为什么要用?- 低延迟(来一个就处理一个)高吞吐(能抵挡大量的数据,需要分布式)结果的准确性和良好的容错性(分布式的话传输过程和数据处理的过程可能会出现乱序;一个挂了之后,回滚到非常近的状态,再跟着处理)
数据报表广告投放 架构演变
事务处理
用户请求=》后台业务=》查询数据库
优点:实时性好
不足:数据量大后高并发难以支撑
分析处理
先把数据整理放到一个数仓,再进行分析和查询
优点:能支持高并发
不足:实时性不好
有状态的流处理
把数据不放在关系数据库,而放在本地内存,设置一个本地状态,相当于用本地内存中的状态代替了关系数据库中的表。这样的好处就是速度会快很多,在高并发时用集群做扩展。
改进
把数据从查数据库改为直接查内存,放到内存宕机了数据会丢失,所以需要定期去保存数据,(Periodic Checkpoint)出错了可以恢复。这样做好处就是速度快,但是如果在分布式下,数据的处理顺序会出现乱序。
lambda架构
保持低延迟和结果准确用了两套系统:Batch Layer进行批处理,保证了数据的准确性。Speed Layer进行快速处理,保证了低延迟。不足就是用了两套系统,复杂度高,占用系统资源
Flink出现
低延迟高吞吐数据准确不乱序
Flink特点支持事件时间和处理时间语义精确一次的状态保证低延迟,每秒处理百万个事件,毫秒级延迟与众多常用存储系统的连接高可用,动态扩展,实现7*24小时全天运行
事件驱动
和传统的架构类似,数据到到flink,会在内存中进行处理,同时会定期存盘。当数据处理完后会写入事件日志中。
无界流和有界流
无界流:没有边界,代表数据不断地在产生,是实时的数据。
有界流:有边界,比如离线的数据,不会再产生了。
分层API
表级别的API(简单的操作)数据流级别的API(实时计算时用DataStream,离线用DataSet)事件状态级别的API
Flink和Spark Streaming的区别底层架构不一样,Flink是以流的方式,Spark Streaming把数据分的很细,但底层还是以批处理的方式。
部署 配置# jobManager 的IP地址
jobmanager.rpc.address: localhost
# JobManager 的端口号
jobmanager.rpc.port: 6123
# JobManager JVM heap 内存大小
jobmanager.heap.size: 1024m
# TaskManager JVM heap 内存大小
taskmanager.heap.size: 1024m
# 每个 TaskManager 提供的任务 slots 数量大小
taskmanager.numberOfTaskSlots: 1
# 程序默认并行计算的个数
parallelism.default: 1
# 文件系统来源
# fs.default-scheme
启动:./start-cluster.sh并行度优先级:代码层面>界面配置>默认配置文件配置
用命令方式执行:
Yarn模式…/flink run -c kmoon.zhu.StreamWordCount –p 2
FlinkTutorial-1.0-SNAPSHOT-jar-with-dependencies.jar --host lcoalhost –port 7777
要求Flink具有Hadoop支持的版本,Hadoop环境要在2.2以上,并且集群中安装有HDFS服务。
Session-cluster模式需要先启动集群,然后再提交作业。向Yarn请求资源空间后,资源不变。资源满了,其他作业需要等待适合小规模执行时间短的作业所有作业共享Dispatch和ResourceManager
Per-Job-Cluster模式
每个Job对应每个集群
每提交一个作业都会单独向yarn申请资源
作业之间相互不影响
适合大规模长时间运行的作业
所有作业独享Dispatcher和ResourceManager
Flink运行时的组件作业管理器(JobManager)
让TaskManager干活向管理器(ResourceManage)申请资源协调检查点(checkpoints)进行数据存盘
任务管理器(TaskManager)
负责为JobManager干活一个JobManager负责多个TaskManager,1个TaskManager包含多个插槽,插槽多少个代表并行度多少TaskManager会向资源管理器注册它的插槽,收到资源管理器指令后,TaskManager会把插槽提供给JobManager调用,JobManager就可以向插槽分配任务来执行
资源管理器(ResourceManager)
负责管理插槽(slot),插槽在flink中是最小的处理资源单元。不同的环境和资源管理工具有不同的资源管理器,比如YARN、Mesos、K8s、standalone部署当JobManager申请插槽资源时,如果ResourceManager没有足够的插槽,它则会向资源提供平台发起会话。
分发器Dispatcher)
可以跨作业运行,为应用提供了Rest接口提供WebUI界面,方便展示和监控Flink 任务提交流程
YARN
怎样进行并行计算?
每一个任务,每一步操作,都可以设置并行度,然后拆成并行的几个task,几个任务,就可以完成并行计算。
设置并行任务,分配到不同的slot上,多线程就可以执行起来。
并行的任务,需要占用多少slot?
一个流处理程序,到底包含多少个任务?
专业术语 并行度特定算子的子任务的个数整条流Stream的并行度是指当前所有并行度中最大的那个
Slots执行一个独立任务/线程所需要的最小单元默认按照CPU的核心数来分配资源,每个slots的内存是隔离的,但是CPU可以共享的。TaskManager对应一个进程,Slots对应一个线程



