承接上篇《Flink学习系列(一)wordcount》。我们先写了一个demo,运行了一下flink程序,然后我们看到了flink运行起来是一个什么样子。这篇文章我们就介绍下flink具体是什么。
一、flink是什么
对于我的理解,flink就是一个分布式计算框架,他负责把接收到的数据进行各种分布式计算后,再把结果处理成我们需要的样子。flink的分布式计算框架主要分为两大块,第一块是批处理,第二块是流处理。像上一篇文章我们演示的从kafka里面获取数据就是流处理。
二、说一说flink的批处理和流处理
批处理:批处理的含义顾名思义就是一批一批数据进行处理,我们常见的形式和情景主要是比如我们程序读取一批数据,然后做分布式计算,计算完后我们比如存储到一个地方之后,这个job任务就结束了,任务进程也就消息掉。下一次如果还需要进行批处理的话,我们还要再启动一遍这个job任务。
流处理:流处理的含义顾名思义就是像流水一样源源不断的接收数据,因此流处理的job任务是一个常驻的进程。我们定义某个数据源,接收到一次数据就处理一次,处理完了整个job任务进程会等待接收下一次的数据,然后再处理。如果程序不出问题或者我们不手动停掉这个job任务,这个job任务的进程会一直存在。
批处理的常见场景有:
1、有一部分老的数据需要进行清洗
2、有一些文件需要解析并处理
3、针对数据库里面的数据做一次性的分析处理
。。。
流处理的常见场景有:
1、在线业务异步数据处理
2、在线业务异步数据存储
3、在线业务异步做数据近实时计算
。。。
常见的批处理数据源有:数据库(mysql,postgresql,sqlserver,oracle等),文件系统(纯文件,hdfs等)等等
常见的流处理数据源有:kafka,pulsar,rabbitmq,cannel等。主要对象还是消息队列。
三、flink的编程模型有哪些
flink常见的编程模型主要有:sql,table,datastream,dataset,下面我们分开讲解下。
1、flink的sql模型: flink里面我们可以直接连接mysql或者类似mysql一样的关系型数据库,然后我们可以像javaweb开发一样的执行sql语句。但是这里的sql执行我们一般应用于数据分析或者数据清晰等,和javaweb不一样,他没法提供api接口对外实时访问。
2、flink的table模型: 这里主要是比如我们有一些类似csv格式的文件,这些文件本来就是表格的形式,有完整的数据结构和数据集,在flink里面使用的时候我们可以直接把这些数据转换成table表的形式,转换后看起来就类似mysql的一张张表,然后我们使用sql进行查询即可。
3、flink的datastream模型:就是上面提到的流处理,程序永久常驻,接收一次数据处理一次。
4、flink的dataset模型:就是上面提到的批处理,程序运行一次就结束了。
四、贴几张图,概括下flink是什么
五、再讲解下flink的整体架构
一共分为四层,从下到上依次是:部署、运行、api、扩展库。从上面的图里面我们也可以得出一个结论,flink的程序里面我们主要使用DataStream和DataSet两个部分,也就是要么流处理,要么批处理。
六、为什么要用flink
其实使用过spark的同学应该有一些了解,flink和spark很近似。在批处理的场景里面,我们使用spark和flink的效果是一样的。但是在近实时的业务场景里面,我们使用flink是比较好的,spark也有stream,但是他是一次取一批数据,同时取数据的过程中有一定的时间延迟。flink不会,flink的流处理和apache storm是一样的,是准实时的处理,不会有时间上的延迟。相比apache storm来说,apache storm又不擅长批处理。所以最终综合比较之后,flink是目前比较好的一个分布式计算框架的选择,他综合了apache spark和apache storm的各个优点。在实际应用中比较合适。同时flink目前在大数据的范畴里面的流行度也证明了flink是非常受欢迎的。所以我们选择了flink。
还没有评论,来说两句吧...