flink学习之二-入门版概念

Flink基础

flink的安装:

如果为单机环境,直接从flink官网下载最新的flink包解压即可。

下载地址:https://flink.apache.org/downloads.html

flink可以存储中间结果、savepoints等信息,而存储的介质可以选择hadoop,所以这里下载<Apache Flink 1.7.1 with Hadoop® 2.8>

下载后,解压,然后执行bin下的start-cluster.sh即可启动

启动成功后,可以在浏览器中输入:http://localhost:8081就可以看到flink的管理控制台,如下:

flink_dashboard.png

另外,如果只是单纯希望调试运行flink的job(使用main方法启动),其实可以不用安装flink环境,flink支持在IDE中直接以项目依赖包的形式运行,只是仅限于调试。

flink中所有job都是通过taskmanager来执行的,是否能立即执行,需要看有没有可用的slot。

一个job的生命周期是: CREATED -->【 SCHEDULED 】-->DEPLOYING --> RUNNING --> FINISHED

SCHEDULED 状态为可选

创建flink-java项目:

mvn archetype:generate \
    -DarchetypeGroupId=org.apache.flink \
    -DarchetypeArtifactId=flink-quickstart-java \
    -DarchetypeVersion=1.7.0 \
    -DgroupId=wiki-edits \
    -DartifactId=wiki-edits \
    -Dversion=0.1 \
    -Dpackage=wikiedits \
    -DinteractiveMode=false

Flink中的核心概念--入门版(更多的是DataStream API)

(仅根据目前接触到的一些核心概念做记录)

  • DataStream: 数据流,flink中所有数据都以流的方式展现。
  • StreamExecutionEnvironment: 流执行的环境,目前看到的很多例子都是通过创建这个对象来串联整体处理流程的。一般通过
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

这种方式来创建对象。

  • DataSource:数据源,通过env.addSource()来设置。一般可以从db、kafka等地方获取数据作为源。所有dataSource均需要继承 RichSourceFunction 这个抽象类,实现其中的open、close、run、cancel等方法。

  • Sink:沉淀、使下沉,在这里指将处理之后的数据存储起来的地方,一般可以放在redis、db、kafka等中,通过 dataSource.addSink()来设置,可以同时设置多个sink。如下:

    dataStreamSource.addSink(new UrlMysqlSink());        
    dataStreamSource.addSink(new PrintSinkFunction<>());
    

    其中PrintSinkFunction是直接输出到控制台,urlMysqlSink则是一个自定义的mysql sink。

    自定义Sink需要继承 RichSinkFunction 这个抽象类,并实现其中的open、invoke方法。

  • Transformation:各种转换,输入一个或多个Stream,输出一个或者多个Stream,常用的transformation如下:

    • map:转换,类似于java8中stream的map,输入一个流,转换输出另外一个流

    • flatmap:与map类似,但是flat的意思是展开,也就是结果只有一层,不会有嵌套集合

      flatmap中需要实现以下方法,可以看到输出的是collector,也就是只有一层集合,而不是嵌套。

      void flatMap(T var1, Collector<O> var2) throws Exception;
      
    • reduce:返回单个的结果值,并且 reduce 操作每处理一个元素总是创建一个新值。可以用来实现average、sum、max、min、count等功能。

    • keyby:类似于sql中的group by,根据某个字段做分组操作,分组后才可以做更多后续的操作。返回的是一个KeyedStream<Object, Type-key> 的流,后面的是key类型。

    • filter:过滤器,其中需要实现的FilterFunction方法返回的是true/false,true代表数据会包含在返回数据中,false则当前数据会被过滤掉。

    • window:用来对一个无限的流设置一个有限的集合,在有界的数据集上进行操作的一种机制。window 又可以分为基于时间(Time-based)的 window 以及基于数量(Count-based)的 window。

      • tumbling time windows(翻滚时间窗口) -- 不会有窗口重叠,也就是一个元素只能出现在一个窗口中

      • sliding time windows(滑动时间窗口)--会有窗口重叠,也就是一个元素可以出现在多个窗口中

        data.keyBy(1)
          .timeWindow(Time.minutes(1)) //tumbling time window 每分钟统计一次数量和
          .sum(1);
        
        data.keyBy(1)
          .timeWindow(Time.minutes(1), Time.seconds(30)) //sliding time window 每隔 30s 统计过去一分钟的数量和
          .sum(1);
        
    • timeWindow: 如上所说,根据时间来聚合流数据。例如:一分钟的 tumbling time window 收集一分钟的元素,并在一分钟过后对窗口中的所有元素应用于一个函数。

    • windowAll:

    • Aggregations:累积、聚合

      • min/minBy:
      • max/maxBy:
      • sum:
    • union:

    • window join:

    • split:

    • select:

    • project:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,783评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,360评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,942评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,507评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,324评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,299评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,685评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,358评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,652评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,704评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,465评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,318评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,711评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,991评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,265评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,661评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,864评论 2 335

推荐阅读更多精彩内容