flink入门到实战(1)入门学习

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对比

 stormflink
状态管理 无状态,需用户自行进行状态管理 有状态
窗口支持 对事件窗口支持较弱,缓存整个窗口的所有数据,窗口结束时一起计算 窗口支持较为完善,自带一些窗口聚合方法,并且会自动管理窗口状态。
消息投递 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)
作者:大码王

-------------------------------------------

个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!

如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•?ω•?)っ???!

原文地址:https://www.cnblogs.com/huanghanyu/p/12841179.html