Flink学习篇章(一)

前言

在18年就听说阿里在大力推崇Flink,之后也查看了很多关于flink在实时流处理上的优势,果断入坑,开始了flink的学习

Flink优势

Flink是一个分布式处理引擎。可以对有限数据流和无限数据流进行有状态的计算,可以部署在各种集群环境中,对各种大小数据的规模进行计算
首先,Flink与strom,spark以及其他流式计算处理引擎相比,它不仅仅是一个高吞吐,低延迟的处理引擎,同时还提供很多高级功能。
比如提供有状态的计算,支持状态管理,支持强一致性的数据语义以及支持Event Time,WateMark对消息乱序的处理等。
其中Flink的一致性语义和最接近Dataflow模型的开源实现,使其成为流计算框架中最耀眼的一颗,
也许这就是阿里看重它的原因。并决心投重金去研究基于flink的Blink框架。

其次,Flink有一些特性值得我们去关注。
它支持批处理和数据流程序处理,优雅流畅的支持Java和Scala api;
支持事件处理和无序处理通过SataStream API;
在不同的时间语义下(时间时间,摄取时间,处理时间)支持灵活的窗口(时间,滑动,翻滚,会话,自定义触发器);
仅处理一次容错的担保;
兼容Hadoop和mapreduce和strom;集成YARN,HDFS,Hbase和其他Hadoop生态系统的组件。

学前准备

flink官网对java,scala,python都支持的,但在自己接触了scala以后,确实有感受到scala代码的简介性.如果有java的基础的话,上手scala就非常快的.

我自己学习Flink时用的是scala2.11版本的的

flink学习的版本用的是19年2月发布的flink1.7.2版本的.足以够用了.

flink学习时参考官网就够了,非常详细的.官网中英文版本都有. 自己英语一般,看官方文档就一份英文加有道词典,一份用谷歌翻译翻成中文,足够了.

flink官网地址: https://flink.apache.org/
flink1.7.2官方文档地址: https://ci.apache.org/projects/flink/flink-docs-release-1.7/

初试flink

https://ci.apache.org/projects/flink/flink-docs-release-1.7/dev/projectsetup/scala_api_quickstart.html
需要的环境是Maven 3.0.4 (or higher) and Java 8.x installations.以上
在本地建个空白文件夹
在cmd打开,进入文件夹,执行
直接粘贴官方文档上的会有空格会报错的,一行一行粘呗,

mvn archetype:generate  -DarchetypeGroupId=org.apache.flink -DarchetypeArtifactId=flink-quickstart-scala -DarchetypeVersion=1.7.2

然后会动态的交互,让你输入groupId,artifidid,版本号啥的,运行成功后,在本地目录下能看到多出来的文件就说明项目创建好了.
然后倒入idea中,写点代码测一下
file

目录中BatchJob文件属于批处理,Streamingjob属于流处理,里面的官方代码注释显示,基本非常相似.
都是创建执行环境对象,操作算子,执行程序这三块组成的
源码在最后我会放到我的github上,可以下载下来瞅瞅
批处理和流处理在代码上很相似的
下面实现的就是一个简单的单词统计

BatchJob的:
 // set up the batch execution environment
    val env = ExecutionEnvironment.getExecutionEnvironment

    val text=env.readTextFile("D:\\test\\b.txt")
    //操作算子
  text.flatMap(_.split("/t")).filter(_.nonEmpty)
    .map((_,1)).groupBy(0).sum(1).print()
		
		Streamingjob的:
		 // set up the streaming execution environment
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    //以流的方式读取数据  主机和端口都可以自己设置
    val value=env.socketTextStream("localhost",9999)
    //将数据打印,模拟流方式接收数据
    //value.print().setParallelism(1)  //并行度写成1

    //操作算子
    value.flatMap(_.split(",")).map((_,1)).keyBy(0).timeWindow(Time.seconds(10))
        .sum(1).print().setParallelism(1)

wc.txt 里就是一些简单的一空格分割的单词

lili jack tom tom
tom tom lili jack jack
tom tom jane jane jane
tom jack jack jack

GitHub地址 : https://github.com/TerryLovesSmiles/Flink-Learning
flink优势参考文章:
https://www.jianshu.com/p/442521ddc28f
https://baijiahao.baidu.com/s?id=1627784225600444769&wfr=spider&for=pc
https://www.cnblogs.com/nicekk/p/11546447.html

你可能感兴趣的:(Flink)