前言:
为什么大家会慢慢青睐上Flink呢?哪些场景会使用它呢?究其原因是因为,信息爆炸时代的来临,我们对数据的及时性和容错性要求越来越高。如双11的电商大屏,我们当然想实时看到销售的滚动数据。我们使用微信、博客等网络软件,当然希望实时接收到对方发送的消息。这些都迫使大数据开发人员需要掌握一种流(实时)处理框架。而Flink正是这块的佼佼者,因此Flink无疑就被捧上了神座。
一、Flink是个什么玩意?
Apache Flink 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。
从上面加粗的文字就体现了FLINK的几大优势,擅长处理无界和有界数据 精确的时间控制和状态化。
1.1处理无界和有界数据
任何类型的数据都可以形成一种事件流。信用卡交易、传感器测量、机器日志、网站或移动应用程序上的用户交互记录,所有这些数据都形成一种流。
数据可以被作为 无界 或者 有界 流来处理。
无界流 有定义流的开始,但没有定义流的结束。它们会无休止地产生数据。无界流的数据必须持续处理,即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理,因为输入是无限的,在任何时候输入都不会完成。处理无界数据通常要求以特定顺序摄取事件,例如事件发生的顺序,以便能够推断结果的完整性。如网络聊天室、网站埋点数据。
有界流 有定义流的开始,也有定义流的结束。有界流可以在摄取所有数据后再进行计算。有界流所有数据可以被排序,所以并不需要有序摄取。有界流处理通常被称为批处理。如产品生产数据、网络小说。有开始有结束。如T+1的数据,前1分钟的数据等等。其实有界与无界在一定条件下是可以相互转换的。
Apache Flink 擅长处理无界和有界数据集 精确的时间控制和状态化使得 Flink 的运行时(runtime)能够运行任何处理无界流的应用。有界流则由一些专为固定大小数据集特殊设计的算法和数据结构进行内部处理,产生了出色的性能。
1.2数据流有状态编程
有状态的 Flink 程序针对本地状态访问进行了优化。任务的状态始终保留在内存中,如果状态大小超过可用内存,则会保存在能高效访问的磁盘数据结构中。任务通过访问本地(通常在内存中)状态来进行所有的计算,从而产生非常低的处理延迟。Flink 通过定期和异步地对本地状态进行持久化存储来保证故障场景下精确一次的状态一致性。
二、真的流批
从上面的描述可以得知,flink的优势在于处理流数据,通过一定的转换规则,从而将流数据转换为批处理数据,做到流批一体,也是当前大数据开发两种最常用的数据处理方式了。是真的流批。
首先来认识几个相关的对象,算子,原子值(vaule),列表(list),映射(map)。首先任何一个流处理和批处理至少都需要三个最基本的对象。即输入、转换、输出。其中转换步骤就是我们常说的算子。根据数据类型的不同,选择不同的组件,如键值、数据集等。都是作为输入的source。