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)

flink入门学习的更多相关文章

  1. 记一次flink入门学习笔记

    团队有几个系统数据量偏大,且每天以几万条的数量累增.有一个系统每天需要定时读取数据库,并进行相关的业务逻辑计算,从而获取最新的用户信息,定时任务的整个耗时需要4小时左右.由于定时任务是夜晚执行,目前看 ...

  2. vue入门学习(基础篇)

    vue入门学习总结: vue的一个组件包括三部分:template.style.script. vue的数据在data中定义使用. 数据渲染指令:v-text.v-html.{{}}. 隐藏未编译的标 ...

  3. Hadoop入门学习笔记---part4

    紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...

  4. Hadoop入门学习笔记---part3

    2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...

  5. PyQt4入门学习笔记(三)

    # PyQt4入门学习笔记(三) PyQt4内的布局 布局方式是我们控制我们的GUI页面内各个控件的排放位置的.我们可以通过两种基本方式来控制: 1.绝对位置 2.layout类 绝对位置 这种方式要 ...

  6. PyQt4入门学习笔记(一)

    PyQt4入门学习笔记(一) 一直没有找到什么好的pyqt4的教程,偶然在google上搜到一篇不错的入门文档,翻译过来,留以后再复习. 原始链接如下: http://zetcode.com/gui/ ...

  7. Hadoop入门学习笔记---part2

    在<Hadoop入门学习笔记---part1>中感觉自己虽然总结的比较详细,但是始终感觉有点凌乱.不够系统化,不够简洁.经过自己的推敲和总结,现在在此处概括性的总结一下,认为在准备搭建ha ...

  8. Retrofit 入门学习

    Retrofit 入门学习官方RetrofitAPI 官方的一个例子 public interface GitHubService { @GET("users/{user}/repos&qu ...

  9. MyBatis入门学习教程-使用MyBatis对表执行CRUD操作

    上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...

随机推荐

  1. mysql创建存储过程及调用

    创建存储过程简单示例: DELIMITER //CREATE PROCEDURE ccgc()BEGINSELECT * FROM TEXT;SELECT * FROM s_user;END//DEL ...

  2. 全网最全最细的fiddler使用教程以及工作原理

    目录:导读 一.Fiddler抓包工具简介 二.Fiddler工作原理 三.Fiddler安装 四.Fiddler界面介绍​ 五.Fiddler菜单栏介绍 六.Fiddler工具栏介绍 七.Fiddl ...

  3. 1. jquery插件手机

    1. http://jqtjs.com/preview/demos/main/index.html#home2. jquery weUI ===== 插件:https://blog.csdn.net/ ...

  4. golang实现并发爬虫二(简单调度器)

    上篇文章当中实现了单任务版爬虫. 那么这篇文章就大概说下,如何在上一个版本中进行升级改造,使之成为一个多任务版本的爬虫.加快我们爬取的速度. 话不多说,先看图: 其实呢,实现方法就是加了一个sched ...

  5. python 给字典按值排序,同样适合于其他

    sorted_items = sorted(dico.items(),key=lambda x:(-x[1],x[0]))

  6. Redis开发运维的陷阱及避坑指南

    原文首发于博客园,作者:后青春期的Keats:地址:https://www.cnblogs.com/keatsCoder/ 转载请注明,谢谢! Linux 配置优化 我们在使用 Redis 过程中,可 ...

  7. php sprintf() 函数把格式化的字符串写入一个变量中。

    来源:https://blog.csdn.net/zxh1220/article/details/79709207 HP sprintf() 函数用到的参数 printf — 输出格式化字符串 spr ...

  8. thinkphp5.0 配置文件加载路径说明

    在thinphp5.0框架里,js,css等配置文件都是加载在/public/static的目录下,所以要引用这些文件,路径必须是要写好的,代码如图: return [ // 默认模块名 'defau ...

  9. Add text to 'Ready Page' in Inno Setup

    https://stackoverflow.com/questions/1218411/add-text-to-ready-page-in-inno-setup

  10. 《图解 HTTP》 摘要一

    学习过程对书本的内容的摘要以及总结,逐步完善,带有个人理解成分. Web 及网络基础 使用 HTTP 协议访问 Web 客户端:通过获取请求获取服务资源的 Web 浏览器等 HTTP 全称:Htype ...