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)

最新文章

  1. 全局唯一ID设计
  2. Servlet执行流程和生命周期【慕课网搬】
  3. css伪元素实现tootip提示框
  4. linux下mysql函数的详细案列
  5. perl在命令行中打印单引号
  6. 不可或缺 Windows Native (2) - C 语言: 常量,变量,基本数据类型
  7. servlet学习笔记四
  8. C++中String类的实现
  9. Contest1065 - 第四届“图灵杯”NEUQ-ACM程序设计竞赛(个人赛)C粉丝与汉诺塔
  10. PowerShell正则表达式(一) 定义模式
  11. Android4: Write Storage权限问题
  12. Coding 代码管理快速入门
  13. windows10 下安装node失败 出现2502 2503的解决办法
  14. Web App、Hybrid App与Native App
  15. 前端Web开发MVC模式-入门示例
  16. c/c++再学习:排序算法了解
  17. mysql 5.7 Group Replication
  18. day_5.21 py 高级编程
  19. postgresql-脏页和缓存失效
  20. sharepoint 2010 怎样在Ribbon区加入功能button

热门文章

  1. CVE-2019-0193 Apache solr velocity模块漏洞
  2. phpstudy之访问loaclhost显示目录
  3. SpringMVC转发及重定向
  4. 报错:require_once cannot allocate memory----php,以前自己弄的稍微有点特殊的开发环境
  5. 使用docker安装codimd,搭建你自己的在线协作markdown编辑器
  6. python爬虫(1)requests库
  7. /sbin/mount.vboxsf: mounting failed with the error: Protocol error
  8. 去掉input阴影&amp;隐藏滚动条&amp;抛异常&amp;预加载&amp;curl传json
  9. 2019-2020-1 20199326《Linux内核原理与分析》第九周作业
  10. 2019-2020-1 20199325《Linux内核原理与分析》第八周作业