Flink学习笔记
一.简介
1.定义:
针对流数据和批数据的分布式处理引擎。它主要是由 Java 代码实现。。
2.应用场景:
流数据:把所有任务当成流来处理,处理观察和分析连续事件产生的数据。
3.重要角色:
①Client :用来提交任务给JobManager。
②JobManager:分发任务给 TaskManager 去执行。
③TaskManager:通过心跳的汇报任务状态。
4.接口:
面向流处理和面向批处理2种接口。
5.flink基石:
Checkpoint:Chandy-Lamport 算法实现 了分布式一致性的快照来提供exactly-once 的语义。
State:托管状态(managed state)并提供了 API 接口;像java集合类一样来管理状态。
Time:watermark 的机制,解决了基于事件时间处理时的数据乱序和数据迟到的问题;
Window:提供了窗口操作来进行流计算,滚动窗口、滑动窗口、会话窗口等。
二.与storm对比
storm | flink | |
---|---|---|
状态管理 | 无状态,需用户自行进行状态管理 | 有状态 |
窗口支持 | 对事件窗口支持较弱,缓存整个窗口的所有数据,窗口结束时一起计算 | 窗口支持较为完善,自带一些窗口聚合方法,并且会自动管理窗口状态。 |
消息投递 | At Most Once At Least Once | At Most Once At Least Once Exactly Once |
容错方式 | ACK 机制:对每个消息进行全链路跟踪,失败或超时进行重发。 | 检查点机制:通过分布式一致性快照机制,对数据流和算子状态进行保存。在发生错误时,使系统能够进行回滚。 |
三.开发环境:window下配置jdk1.8和maven环境
四.案例
1.统计单词数
package flinkDemo
import org.apache.flink.api.scala._
import org.apache.flink.core.fs.FileSystem.WriteMode
/**
* @Description * @Author <613024710@qq.com>
* @Version V1.0
* @Since 1.0
* @Date 2019/6/13 0013 14:53
* @Description * @ClassName WordCount
*/
object WordCount {
def main(args: Array[String]) {
val env = ExecutionEnvironment.createLocalEnvironment(1)
//从本地读取文件
val text = env.readTextFile("D:\\data\\words.txt")
//单词统计
val counts = text.flatMap { _.toLowerCase.split(" ") filter { _.nonEmpty } }
.map { (_, 1) }
.groupBy(0)
.sum(1)
//输出结果
counts.print()
//保存结果到txt文件
counts.writeAsText("D:\\data\\output.txt", WriteMode.OVERWRITE)
env.execute("Scala WordCount Example")
}
}
结果:
(administered,1)
(allow,1)
(along,1)
(an,1)
(and,5)
(both,1)
(by,1)
(code,1)
(collaborates,1)
(commercial,1)
(community,2)
(conferences,1)
(contributed,1)
(developed,1)
(distributable,1)
(documentation,1)
(endless,1)
(even,1)
(for,3)
(foundation,1)
(freely,1)
(help,1)
(hosts,2)
(in,1)
(index,1)
(is,2)
(it,1)
(keep,1)
(library,1)
(license,2)
(lists,1)
(mailing,1)
(making,1)
(meetups,1)
(modules,2)
(more,1)
(much,1)
(of,1)
(on,1)
(open,1)
(osi-approved,1)
(package,1)
(party,1)
(possibilities,1)
(python,4)
(python's,3)
(software,1)
(source,1)
(standard,1)
(the,6)
(third,1)
(thousands,1)
(touch,1)
(under,1)
(usable,1)
(use,1)
(way,1)
(will,2)
(you,2)