`
shenhaiyue
  • 浏览: 24324 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Flink入门到实践

    博客分类:
  • java
阅读更多
1 导言

通过本文可以快速的了解Flink开发的模式和开发的时候最常见的概念,算子、位点提交、slot和并行度都是开发工作中必须要了解的知识;我们已对Flink相关的功能进行了封装,开发者不需要关注数据如何接入、如何输出;只需要关注自己的业务逻辑即可,有需求的可联系我们进行探讨。
1.1 Flink介绍

Flink是一个支持分布式、高性能、高可用性、高可靠性的流式处理框架
高吞吐、低延迟、高性能
批流统一:Runtime和SQL层批流统一,提供高吞吐低延时就算能力和更强大的SQL支持。
生态兼容:与Hadoop Yarn/Apache Mesos等集成,并且支持单机模式运行。
规模计算:作业可被分摊成若干个任务,分布在集群中并发执行。
高度灵活的窗口(Window)操作,支持基于time、count、session窗口
用Event Time 和 Water Mark 等先进技术解决消息乱序问题
具有Backpressure 以及系统自带监控功能
有状态,轻量级分布式快照(Snapshot),增量checkpoint机制实现容错
自己的内存管理, 与Spark tungsten计划类比

1.2 Flink storm比较


2 消息投递方式

At Most Once:至多一次,表示一条消息不管后续处理成功与否只会被消费处理一次,那么就存在数据丢失可能、
At Least Once:至少一次,表示一条消息从消费到后续的处理成功,可能会发生多次
Exactly Once:精确一次,表示一条消息从其消费到后续的处理成功,只会发生一次

3 通用接入模式


source:数据输入源,基于本地接的source、基于文件的source、基于网络套接字的source、自定义source;自定义的通常有JDQ,JMQ
transfer:数据转换的各种操作(算子),将通过source接收的数据按照业务逻辑加工(将数据转换成我们想要的数据)
sink:接收器(输出),将转换计算后的数据发送的地点;常见的有:写入文件、打印出来、写入socket、自定义sink;,自定义的sink有mysql,elasticsearch,redis,jdq,mq
4 算子介绍


4.1 fliter

意思是进行筛选将成绩小于400分的的同学信息过滤掉,只要总成绩大于400的

4.2 map

意思是对每个元素进行一定的变换,映射为另一个元素将每个学生的总成绩加20分

4.3 flatmap

意思是为将元素摊平,每个元素可以变为0个、1个、或者多个元素将每个学生的每个学科的成绩信息打印出来

4.4 keyby

意思是根据指定的Key进行分区,是根据key的散列值进行分区按照学科名称将课程信息按分区进行keyby

4.5 侧输出

一个流有多个输出,侧输出结果流的数据类型不需要与主数据流的类型一致,不同侧输出流的类型也可以不同侧输出类型定义:source为70的

侧输出处理:将source=70的数据输出到上面定义的outputTag中

侧输出数据流获取

4.6 窗口

window可以帮助我们将无限流拆分成一定大小的模块;在Flink中,window的使用如下:

Flink窗口的骨架结构中有两个必须的操作:
使用窗口分配器(WindowAssigner)将数据流中的元素分配到对应的窗口。
当满足窗口触发条件后,对窗口内的数据使用窗口处理函数(Window Function)进行处理,常用的Window Function有reduce、aggregate、process。

4.6.1 滚动窗口
窗口之间之间不重叠,且窗口长度是固定的,可以用TumblingEventTimeWindows和TumblingProcessingTimeWindows创建一个基于Event Time或Processing Time的滚动时间窗口
4.6.2 滑动窗口
以一个步长(slide)不断向前滑动,窗口的长度固定,可以用SlidingEventTimeWindows和SlidingProcessingTimeWindows来创建滑动窗口

4.6.3 会话窗口
根据Session gap切分不同的窗口,当一个窗口在大于Session gap的时间内没有接收到新数据时,窗口将关闭

5 checkpoint(位点提交)

再可靠的框架也有出现各种原因导致整个任务失败的可能性,Flink提供的位点可以最大限度的让我们在任务异常时恢复任务,位点提交的过程如下:

JobManager向所有的source 发送checktpointTrigger,Source Task会在数据流中安插CheckPoint barrier
Source Task在接收到barrier的时候自身做快照,并保存到状态后端
Source Task在完成自身快照之后将barrier跟数据流一块往下游发送
当下游的Operator实例接收到CheckPoint barrier后,对自身做快照
当所有task完成快照之后,将地址信息通知JobManger
当JobManager收到所有完成task的反馈信息之后,将这些备份数据的地址写入可持久化存储中

位点提交的时候会有barrrier对齐和不对齐的情况: 一旦Operator从输入流接收到CheckPoint barrier n,它就不能处理来自该流的任何数据记录,直到它从其他所有输入接收到barrier n为止。否则,它会混合属于快照n的记录和属于快照n + 1的记录;接收到barrier n的流暂时被搁置。从这些流接收的记录不会被处理,而是放入输入缓冲区。一旦最后所有输入流都接收到barrier n,Operator就会把缓冲区中pending 的输出数据发出去,然后把CheckPoint barrier n接着往下游发送
6 parallelism和Slot

6.1parallelism
指 taskmanager 实际使用的并发能力

parallelism.default:1运行程序默认的并行度为 1,9 个 TaskSlot 只用了 1 个,有 8 个空闲。设置合适的并行度才能提高效率。
6.2 slot

taskmanager 的并发执行能力slot 的数量通常与每个 TaskManager 的可用 CPU 内核数成比例。一般情况下你的 slot 数是,slot对Taskmanager内存进行平均分配,每个slot内存相同,加起来和等于taskManager可用内存,但是仅仅对内存做了隔离,并没有对CPU进行隔离。你每个 TaskManager 的 cpu 的核数

taskmanager.numberOfTaskSlots:3每一个 taskmanager 中的分配 3 个 TaskSlot, 3 个 taskmanager 一共有 9 个 TaskSlot。
6.3 SlotSharingGroup

Flink 允许subtasks共享slot,条件是它们都来自同一个Job的不同task的subtask.
通过调整 task slot 的数量,用户可以定义task之间是如何相互隔离的。每个 TaskManager 有一个slot,也就意味着每个task运行在独立的 JVM 中。每个 TaskManager 有多个slot的话,也就是说多个task运行在同一个JVM中。而在同一个JVM进程中的task,可以共享TCP连接(基于多路复用)和减少数据的网络传输。也能共享一些数据结构,一定程度上减少了每个task的消耗。
7 运行Flink程序流程

7.1 申请JRC资源

Flink任务运行之前得先申请运行的机器资源,可以在http://bdp.jd.com/jrdw/jrctask2/flink/management/titleMenuNoLeft.html?url=%2Fflink%2FclusterList上按如下方式申请;
集群管理页面
申请机器资源页面
7.2 集群创建

在申请的资源审批通过之后,可基于申请的资源创建所需的运行集群,可以在集群创建页面配置集群的配置参数;其中集群创建页面的配置项所属应用和我们刚才申请机器资源页面的服务目录保持一致;引擎高级配置可以手动配置一些特殊配置项;比如使用JSF 的时候类加载方式以及位点提交方式配置等。如果Flink程序中有读写大数据平台的功能,需要打开读写大数据平台集市选项,并配置大数据平台集市信息。


Flink集群创建页面
7.3 Flink运行任务构建

构建Flink任务的时候,建议选择Git,避免用Jar包的时候,多人协同开发因本地代码提交不及时的造成的非必要问题;其中的默认并行度是整个程序的并行度,如果不在程序中单独设置每个算子的并行度的话,source 到 operator到sink并行度都一样,构建完成之后,点击下一步可参看整个flink任务的运行拓扑,最后对审批完成的任务进行发布操作。
分享到:
评论

相关推荐

    Flink原理与实践-PPT课件.rar

    Flink原理与实践-PPT课件.rar

    flink入门到精通视频教程

    3.结合工作实践及分析应用,培养解决实际问题的能力。 4.每一块知识点, 都有配套案例, 学习不再迷茫。 课程内容: 1.Flink框架简介 2.Flink集群搭建运维 3.Flink Dataset开发 4.Flink 广播变量,分布式缓存,累加器 ...

    flink入门实战

    以flink处理kafka消息流场景为例,将接受到的kafka消息sink到mysql、elastic、hdfs、kafka,通过真实的案例,助你入门flink计算框架。课程案例代码也可移植到其它业务系统,实现快速开发。

    flink零基础入门.pdf

    Apache Flink 进阶(四):Flink on Yarn/K8s 原理剖析及实践 41 Apache Flink 进阶(五):数据类型和序列化 60 Apache Flink 进阶(六):Flink 作业执行深度解析 71 Apache Flink 进阶(七):网络流控及反压剖析...

    Flink简单demo,可直接导入运行

    可以作为flink入门代码参考,简单的单词统计demo,希望对大家有所帮助

    flink-local-train:flink入门到项目实践

    Flink从入门到项目实践 Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,提供支持流处理和批处理两种类型应用的功能。文章会对Flink中基本API如:DataSet、DataStream、Table、Sql和常用特性...

    Flink部署实践高级应用开发教程-网盘链接提取码下载 .txt

    Flink生产部署的最佳实践课程基于5部分内容组成,第一部分介绍了Flink的快速入门,第二部分讲解Flink编程及核心概念,第三部分Flink Source编程,第四部分是Flink Join编程,最后一部分是Flink自定义Source&流处理...

    flink快速入门

    Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能。

    flink学习.zip

    flink的学习相关资料,里面包括flink的学习路线,入门教程,实际手册以及阿里的实践,不知道该如何学习flink的可以下载参考下,希望能对大家有帮助

    java专题,教学资元 共159g

    包含:socket网络编程及实战,系统学习docker,看的见的算法 7个经典应用诠释算法精髓,一站式学习Redis 从入门到高可用分布式实践,Spring Boot 2.0深度实践之核心技术篇,Scala 学习 进击大数据Spark生态圈,剑指Java面试...

    FlinkExample-master.zip

    flink 入门开发基础案例,覆盖大部分场景编写,培训flink 实践的代码,仅供学习参考使用

    大数据知识仓库涉及到数据仓库建模、实时计算、大数据、数据中台、系统设计、Java、算法等代码

    Hadoop快速入门 HDFSOverView Hadoop广义生态系统 Hadoop高可用配置 HadoopCommon分析 HDFS集群相关管理 HDFS Shell 5.2 MapReduce 分布式处理框架MapReduce MapReduce概览 MapReduce调优 MapReduce数据相关操作 ...

    Alink在微博机器学习平台中的实践.pdf

    Alink在微博机器学习平台中的实践.pdf

    java实现数据同步源码-BigData-In-Practice:大数据实践项目Hadoop、Spark、Kafka、Hbase、Flink

    综合实践项目 项目名 说明 使用 Spark SQL imooc 访问日志,数据清洗,统计,可视化 入门学习示例 项目名 所属组件 介绍 MapReduce MapReduce 实验 - 计算气温 最大/最小/平均 值 HDFS HDFS Java API 增删查改 HDFS ...

    大数据入门学习教程.zip

    大数据开发是一个涉及多个领域和技术的复杂过程,但通过系统性的学习和实践,你可以逐步掌握相关的技能和知识。以下是一个大数据开发的入门学习教程,帮助你了解大数据开发的基本概念、技术和工具。 一、了解大数据...

    pyflink_learn:基于 PyFlink 的学习文档,通过一个个小实践,便于大家快速入手 PyFlink

    PyFlink 从入门到精通 基于 PyFlink 的学习文档,通过一个个小实践,便于小伙伴们快速入手 PyFlink 1、本地开发环境搭建 1.1、安装Flink 1.1.1、Mac 首先本地的 java 版本需要升级到 8 或 11 java -version # 可能会...

Global site tag (gtag.js) - Google Analytics