初识flink

2020-06-29 00:00:00 数据 状态 实时 批处理 数据流

随着大数据的技术的飞速发展,大数据处理引擎也再不断在进化。从一开始的hadoop的mapreduce 再后来的spark,strom, flink。

每款产品的出现都有着象征性意义,但都有各自的特点和各自适用的场景。

1.mapreduce只能做批处理,是基于磁盘的计算。会有大量的io操作,但是在硬件水平还跟不上的时代,这种方式肯定是了。

2.spark是微批处理的计算框架,基于内存计算的。spark初的定位就是改进MR,能更快速地批处理,省略了大量的io操作,性能也是有大幅提升。但是随着而来的是内存溢出的问题。这个就考验程序员的功底了。写过spark的同学肯定都遇到过数据倾斜的问题,面试的时候也肯定会问到相关问题。所以遇到问题也不要怕,都是有解决办法的,我在这里就不多述了。

4.storm擅长的是无状态的流处理,无状态的流处理状态中延迟小的。

3.flink是支持批处理也支持的流处理模式的,而且还支持有状态的流处理。

下面简单介绍一下flink中长出现的基本概念。

什么是流stream呢?

流分为有限数据流和无限数据流。有限数据流是有始有终的,有限定大小的数据集合。无限数据流是有始无终的,随着时间的推移,数据会一直增加。

什么是状态state呢?

状态是数据计算过程中的数据信息。如,每条数据间都是独立的,无依赖,此时就是无状态的流处理。如果数据间有依赖关系,需要保存之前的状态,就是有状态的流处理。

什么是流式处理呢?

无穷无尽的数据源持续收取数据,经过一定逻辑处理后,持续输出结果。这就是流式处理的基本原理。如上图,方块形式的数据,经过逻辑处理后,以三角形形式持续输出过程。

flink的应用场景有哪些呢?

1.Data Pipeline - ETL

ETL(Extract-transform-load)就是数据搬运并在数据搬运过程中对数据进行清洗或者处理。如上图,左侧是周期ETL,右侧是实时ETL,通过订阅消息队列的消息并实时处理,清洗完后输出到数据库或文件系统中。

实时数仓

当下游要构建实时数仓时,上游则可能需要实时的Stream ETL。这个过程会进行实时清洗或扩展数据,清洗完成后写入到下游的实时数仓的整个链路中,可保证数据查询的时效性,形成实时数据采集、实时数据处理以及下游的实时Query。

搜索引擎推荐

搜索引擎这块以零售为例,当卖家上线新商品时,后台会实时产生消息流,该消息流经过Flink 系统时会进行数据的处理、扩展。然后将处理及扩展后的数据生成实时索引,写入到搜索引擎中。这样当淘宝卖家上线新商品时,能在秒级或者分钟级实现搜索引擎的搜索

2.实时数据分析 Data Analytics

如图,左边是Batch Analytics,右边是Streaming Analytics。Batch Analytics 就是传统意义上使用类似于Map Reduce、Hive、Spark Batch 等,对作业进行分析、处理、生成离线报表;Streaming Analytics 使用流式分析引擎如Storm、Flink 实时处理分析数据,应用较多的场景如实时大屏、实时报表。

3.Data Driven 事件驱动

从某种程度上来说,所有的实时的数据处理或者是流式数据处理都是属于Data Driven,流计算本质上是Data Driven 计算。应用较多的如风控系统,当风控系统需要处理各种各样复杂的规则时,Data Driven 就会把处理的规则和逻辑写入到Datastream 的API 或者是ProcessFunction 的API 中,然后将逻辑抽象到整个Flink 引擎,当外面的数据流或者是事件进入就会触发相应的规则,这就是Data Driven 的原理。在触发某些规则后,Data Driven 会进行处理或者是进行预警,这些预警会发到下游产生业务通知,这是Data Driven 的应用场景,Data Driven 在应用上更多应用于复杂事件的处理。

相关文章