IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Flink流处理引擎系统学习(四) -> 正文阅读

[大数据]Flink流处理引擎系统学习(四)

前言

???????想用公司的时间做提升,那肯定是build your dream。入职这家公司已经3年了,没有公司的培养培训,都是自己捣腾。何况我们还不是什么大厂,早上领导已经发话要切进项目看这么引入flink做改造了。不管咋样,学习是自己的事情,这个必须学出一定高度,博友们监督,哈哈。


一、分层架构

???????之前在开篇就有整体介绍,现在进入具体一点的讲解。首先,我说下个人的理解,分层架构我认为是轮子、语法的关系,底层的语法可以造出很多轮子,上层可以不管轮子怎么做出来的。比如一个车企,可以自己生产轮子,也可以直接用通用的轮子。其实底层就更接近源码,这应该要到达一定高度了,可以自己造更多好轮子给别人用。。。
分层图:
在这里插入图片描述
???????要想用高层的语法,那就得熟悉底层,不然那就是瞎写。当然,很多业务场景如果特殊,那肯定用底层的处理更贴合。
各层介绍:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结论:
???????灵活性高写法就复杂,写法简单需要深入理解。

二、DataFlow&基本套路

在这里插入图片描述
编码基本套路
在这里插入图片描述

???????上面的基本套路是没有指定并行度的,如果指定并行度,那就是并行的DataFlow
在这里插入图片描述

  • 并行度设置:parallelism
  • 并行的交叉处理:
    如果source[1]出现a,source[2]也出现a,如果分别发给2个map,如果继续分开处理统计的就会有问题,所以做Shuffle(洗牌)。有些发map[1]、有些发map[2]是根据key来的。
    根据key发同一个map处理,这种交叉处理的方式叫洗牌Shuffle。
    算子间数据传递模式
    在这里插入图片描述
    broadcast:广播,就是都发一份。

三、核心概念介绍

1、windows
在这里插入图片描述
2、Time
在这里插入图片描述

  • eventTime:事件时间
  • IngestionTime:摄取时间
  • processingTime:处理时间
    3、有状态的操作
    在这里插入图片描述
    4、备份
    在这里插入图片描述

在这里插入图片描述


四、补充

A、那些需要指定键
? 哪些操作需要指定key(join, coGroup, keyBy, groupBy,Reduce, GroupReduce,
Aggregate, Windows)
? Flink编程模型的key是虚拟的,不需要你创建键值对
DataSet<…> input = // […]
DataSet<…> reduced = input
.groupBy(/define key here/)
.reduceGroup(/do something/)

B、为Tuple定义键
? 按照指定属性分组
DataStream<Tuple3<Integer,String,Long>> input = // […]
KeyedStream<Tuple3<Integer,String,Long>,Tuple> keyed = input.keyBy(0)
? 按照组合键进行分组
DataStream<Tuple3<Integer,String,Long>> input = // […]
KeyedStream<Tuple3<Integer,String,Long>,Tuple> keyed = input.keyBy(0,1)
? 特殊情况:嵌套Tuple
DataStream<Tuple3<Tuple2<Integer, Float>,String,Long>> input = // […]
KeyedStream<Tuple3<Integer,String,Long>,Tuple> keyed = input.keyBy(0)
注意:这里使用KeyBy(0)指定键,系统将会使用整个Tuple2作为键(整型和浮点型的)。如果想使用Tuple2内部字段作为键,你可以使用字段来表示键。

C、Rich Function丰富的功能
非常有用的四个方法:open,close,getRuntimeContext和setRuntimecontext
这些功能在参数化函数、创建和确定本地状态、获取广播变量、获取运行时信息(例如
累加器和计数器)和迭代信息时非常有帮助。

D、Flink支持的数据类型
? Flink支持Java和Scala所有的基本数据类型,比如 Integer,String,和Double
? Flink对DataSet和DataStream中可使用的元素类型添加了一些约束。原因是系统可以通过分析这些类
型来确定有效的执行策略和选择不同的序列化方式。有7中不同的数据类型:
? Java Tuple 和 Scala Case类;
? Java POJO;
? 基本类型;
? 通用类;
? 值;
? Hadoop Writables;
? 特殊类型

E、累加器和计数器
?计数器是最简单的累加器
?内置累加器:
?IntCounter, LongCounter 和 DoubleCounter
?Histogram

F、如何使用累加器
? 第一步:在自定义的转换操作里创建累加器对象:
private IntCounter numLines = new IntCounter();
? 第二步:注册累加器对象,通常是在rich function的open()方法中。这里你还需要定义累加器的名字
getRuntimeContext().addAccumulator(“num-lines”, this.numLines);
? 第三步:在operator函数的任何地方使用累加器,包括在open()和close()方法中
this.numLines.add(1);
? 第四步:结果存储在JobExecutionResult里:
JobExecutionResult JobExecutionResult =env.execute(“Flink Batch Java API Skeleton”)
myJobExecutionResult.getAccumulatorResult(“num-lines”)

G、自定义累加器
? 实现Accumulator或者SimpleAccumulator


总结

1、分层架构,一定要理解清楚,方便后期结合业务场景选对api
2、核心概念要理解,一般面试应该会问
3、DataFlow的基本套路要自己发散
就写到这里,跟大家一起up。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-23 10:53:19  更:2022-04-23 10:55:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:07:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码