flink的探索(low文档多多指教)

Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能。( Flink以前名字叫做Stratosphere)。
flink从两外一个角度看待批处理和流处理,将二者统一起来:flink时完全支持流处理的,也就是说作为流处理看待时输入数据流是无界的;批处理是有界的流处理。
flink处理特性:
1.支持高吞吐,低延迟,高性能的流处理
2.支持带有事件时间的窗口(window)操作
3.支持有状态计算的 Exactly-once语义
4.支持高度灵活的窗口(window)操作,支持基于time,count,session,以及data-driven的窗口操作
5.支持具有backpressure功能的持续流模型
6.支持基于轻量级分布式快照实现的容错
7.一个运行时同时支持 Batch on Streaming处理和Streaming处理
8.flink在jvm内部实现了自己的内存管理
9.支持迭代计算
10.支持程序自动优化:避免特定情况下shuffle,排序等昂贵操作,中间结果有必要进行缓存。
flink的探索(low文档多多指教)_第1张图片
flink的探索(low文档多多指教)_第2张图片

  1. 运行时层以JobGraph形式接收程序。JobGraph即为一个一般化的并行数据流图(data flow),它拥有任意数量的Task来接收和产生data stream。
  2. DataStream API和DataSet API都会使用单独编译的处理方式生成JobGraph。DataSet API使用optimizer来决定针对程序的优化方法,而DataStream API则使用stream builder来完成该任务。
  3. Gelly 图像处理,flinkml机器学习,复杂事件处理cep
原理
1.流,转换,操作符
Flink程序是由Stream和Transformation这两个基本构建块组成,其中Stream是一个中间结果数据,而Transformation是一个操作,它对一个或多个输入Stream进行计算处理,输出一个或多个结果Stream。
2.见图
flink的探索(low文档多多指教)_第3张图片
3.任务,操作符链
flink分布式执行环境中,会将多个操作子任务串起来组成一个operator chain,实际上就是一个执行链,每个执行链会在taskmanager上一个独立的线程中执行。
4.时间
处理stream中的记录时,记录中通常会包含各种典型的时间字段:
  1. Event Time:表示事件创建时间
  2. Ingestion Time:表示事件进入到Flink Dataflow的时间
  3. Processing Time:表示某个Operator对事件进行转换的本地系统时间
flink的探索(low文档多多指教)_第4张图片
Flink使用WaterMark衡量时间的时间,WaterMark携带时间戳t,并被插入到stream中。
1.WaterMark的含义是所有时间t'< t的事件都已经发生。
2.针对乱序的的流,WaterMark至关重要,这样可以允许一些事件到达延迟,而不至于过于影响window窗口的计算。
3.并行数据流中,当Operator有多个输入流时,Operator的event time以最小流event time为准。
5. 窗口
flink支持基于时间窗口操作,也支持基于数据的窗口操作:
flink的探索(low文档多多指教)_第5张图片
窗口分类:
1.按分割标准划分:timewindow,countwindow
2.按窗口行为划分:tumbling window,sliding window,自定义窗口,sliding window可以添加触发时间。
6.容错
  1. 出现一个Barrier,在该Barrier之前出现的记录都属于该Barrier对应的Snapshot,在该Barrier之后出现的记录属于下一个Snapshot。
  2. 来自不同Snapshot多个Barrier可能同时出现在数据流中,也就是说同一个时刻可能并发存在多个Snapshot。
  3. 当一个中间(Intermediate)Operator接收到一个Barrier后,它会发送Barrier到属于该Barrier的Snapshot的数据流中,等到Sink Operator接收到该Barrier后会向Checkpoint Coordinator确认该Snapshot,直到所有的Sink Operator都确认了该Snapshot,才被认为完成了该Snapshot。
图解释
flink的探索(low文档多多指教)_第6张图片
对齐:
当Operator接收到多个输入的数据流时,需要在Snapshot Barrier中对数据流进行排列对齐:
  1. Operator从一个incoming Stream接收到Snapshot Barrier n,然后暂停处理,直到其它的incoming Stream的Barrier n(否则属于2个Snapshot的记录就混在一起了)到达该Operator
  2. 接收到Barrier n的Stream被临时搁置,来自这些Stream的记录不会被处理,而是被放在一个Buffer中。
  3. 一旦最后一个stream接收到Barrier n,Operator会emit所有暂存在Buffer中的记录,然后向Checkpoint Coordinator发送Snapshot n。
  4. 继续处理来自多个Stream的记录
7.调度
在JobManager端,会接收到Client提交的JobGraph形式的Flink Job,JobManager会将一个JobGraph转换映射为一个ExecutionGraph,ExecutionGraph是JobGraph的并行表示,也就是实际JobManager调度一个Job在TaskManager上运行的逻辑视图。
flink的探索(low文档多多指教)_第7张图片
8.迭代
机器学习和图计算应用,都会使用到迭代计算,Flink通过在迭代Operator中定义Step函数来实现迭代算法,这种迭代算法包括Iterate和Delta Iterate两种类型。
9.back pressure 监控
流处理系统中,当下游Operator处理速度跟不上的情况,如果下游Operator能够将自己处理状态传播给上游Operator,使得上游Operator处理速度慢下来就会缓解上述问题,比如通过告警的方式通知现有流处理系统存在的问题。
Flink Web界面上提供了对运行Job的Backpressure行为的监控,它通过使用Sampling线程对正在运行的Task进行堆栈跟踪采样来实现。
默认情况下,JobManager会每间隔50ms触发对一个Job的每个Task依次进行100次堆栈跟踪调用,过计算得到一个比值,例如,radio=0.01,表示100次中仅有1次方法调用阻塞。Flink目前定义了如下Backpressure状态:
OK: 0 <= Ratio <= 0.10
LOW: 0.10 < Ratio <= 0.5
HIGH: 0.5 < Ratio <= 1
部署
java环境

1.官网下载flink并解压具体命令
tar -zxvf flink-* (想该名的改名字 mv 原来名字 修改的名字)
2.cd flink-1.3/conf/ 修改里面的flink-conf.yaml配置文件的内容
flink的探索(low文档多多指教)_第8张图片
taskmanager.tmp.dirs:/tmp 临时文件的目录(属于上面配置,截图没截到)

注:上面图片参数说明
1.master的主机名或者IP
2.jobmanager监听的端口
3.jobmanager的内存参数
4.taskmanager可用的内存
5.每台taskmanager可用的solt数目,一般设置CPU的core数
6.numtaskmanagers(slave的个数)


这个是web UI界面的端口号
3.修改conf/masters文件
vi masters
主节点ip:port 比如10.10.198.12:8081
4.修改conf/slaves文件
vi slaves
从节点的IP(有几台写几台)

每一台机器都需要配置一致,当主节点配置好之后可以用以下命令进行复制到其他机器
scp -r 要传的文件名字 传到机器的用户名(如admin)@传到机器的ip:传到机器所在的位置
如:

scp -r masters [email protected]:/home/admin/flink-1.3.2/conf/

最后全部完成之后就可以进行开启你的flink集群了
cd bin
./start-cluster.sh
关闭集群命令
./stop-cluster.sh


小弟第一次写文档,多多指教。下一节写在配置flink的高可用,分别自身集群上的zk或其他机器上的zk配置。



你可能感兴趣的:(大数据框架flink)