1、简介
flink是一个框架和分布式处理引擎,用于对有界流和无界流进行状态计算。
1.1 有界数据集和无界数据集
有界数据: 常规数据访问一般是从数据库,文本等数据存储介质中获取数据进行计算,分析,处理。此类数据的特点是数据是静止不动的,有或者说在处理的当时时刻不考虑数据追加,写入操作。有界数据集有定义的开始和结束,可以在计算之前提取某时刻内的数据做有界数据计算
所有说有界数据集,对某段时间的数据进行计算,这种计算称之为批处理(batch processing)。
无界数据集:某些特定场景,例kafka的持续计算等被认定为无界数据集,无界数据集是会发生持续变化,连续追加的。例:实时日志,订单变化,网络传输流等。有起点,没有定义的终点,不会终止并且在处理数据是持续产生新的数据,处理无限制的数据通常要求以特定顺序(例如事件发生的顺序)提取事件,以便能够推断出结果的完整性,对于此类数据的计算方式称之为流计算(stream processing)
有界数据集与无界数据集是一个相对模糊的概念,如果数据一条一条的经过处理引擎那么则可以认为是无界的,那么如果每间隔一分钟、一小时、一天进行一次计算那么则认为这一段时间的数据又相对是有界的。有界的数据又可以把数据一条一条的通过计算引擎,造成无界的数据集。
1.2 实时流和记录流
实时流和记录流:所有数据均作为流生成。有两种处理数据的方法。在生成流时对其进行实时处理,或将流持久化到存储系统(例如文件系统或对象存储)中,并在以后进行处理。Flink应用程序支持处理记录的流或实时流。
1.3 批处理和流处理的框架
能实现批处理和流处理的框架有:apache Flink 和 apache spark 。其中spark的流处理场景原理是一个微批处理场景,就是它在特定的时间间隔发起一次计算,而不是每条都会触发计算,是把无界数据集分成为无数小量的有界数据集。
Flink 基于有界数据集与无界数据集的特点,最终将批处理与流处理混合到同一套引擎当中,用户使用Apache Flink引擎能够同时实现批处理与流处理任务。
2、flink技术特点
2.1 流处理特点
支持高吞吐,低延迟,高性能的流处理
支持带有事件事件的窗口(window)操作
支持高度灵活的窗口(Window)操作,支持基于time、count、session,以及data-driven的窗口操作
支持具有Backpressure功能的持续流模型
支持基于轻量级分布式快照(Snapshot)实现的容错
一个运行时同时支持Batch on Streaming处理和Streaming处理
Flink在JVM内部实现了自己的内存管理
支持迭代计算
支持程序自动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存
2.2 API支持
流处理: DataStream API
批处理:DataSet API
2.3 Libraries支持
支持机器学习(FlinkML)
支持图分析(Gelly)
支持关系数据处理(Table)
支持复杂事件处理(CEP)
2.4 整合支持
支持 Flink on yarn
支持HDKS
支持来自kafka的输入数据
支持ElasticSearch
支持RabbitMQ
支持hadoop程序
。。。。
2.5 Flink生态圈
支持scala 和java api。
2.6 Flink的编程模型
Flink提供不同级别的抽象来开发流/批处理应用程序。