Flink重要的角色
JobManager
负责任务调度执行和分发任务
称之为Master,用于协调分布式执行,用来调度task,协调检查点CheckPoint,协调失败时候恢复等,Flink运行时至少存在一个master处理器,如果配置高可用模式会存在多个master处理器,他们其中有一个是leader,而其他的都是standby
TaskManager
负责任务的进行
称之为worker,用于执行一个dataflow的task(或者说是特殊的subtask)、数据缓冲和datastream的交换,Flink运行时至少有一个worker处理器。
无界数据和有界数据
无界数据流
源源不断的数据,比如:网站的点击量,统计某个路口通过的车辆
有开始,没有结束。它们不会在生成时终止并且提供数据,必须连续处理无界流,也就是说必须在获取后立即处理event。对于无界数据流,我们无法等待所有数据都到达,因为输入是无界的,并且在任何时间都不会完成,处理无界数据流需要要求一待定顺序获取event
有界数据流
有界数据源:有固定数据的数据,比如半年内的所有订单
有界数据流:有界数据有明确定义的开始与结束,可以在执行任何计算之前通过获取所有数据来处理有界流,处理有界流不需要有序获取,因为始终可以对有界数据集进行排序,有界流的处理也成为批处理
再提到Flink
Flink是一个面向分布式数据流处理和批处理的开源计算平台,它能够基于同一个Flink运行时( Flink RunTime),提供流处理和批处理两种类型应用的功能,现有的开源计算方案,会把流处理和批处理作为两种不同的应用类型,因为他们要实现的目标是完全不相同的,流处理一般需要低延迟,Exactly-once保证,而批处理需要支持高吞吐,高效处理,所以在实现的时候通常是分别给出两套实现方法,或者通过一个独立的开源框架来实现其中每一种处理方案,例如:实现批处理的开源方案有MapReduce、Tez、Crunch、Spark,实现流处理的开源方案有Samza、Storm
Flink在实现流批处理的时候,与传统的统一方案不同,它从另一个视角看待流处理和批处理,将二者统一起来,Flink完全支持流处理,也就是说作为流处理看待时,输入数据流是无界的,批处理作为一种特殊的流处理,只是他定义的数据是有界的。
Flink数据流编程模型
提供了四种编程模型,分别对应我们不同的场景,无缝切换。