`
shenhaiyue
  • 浏览: 25782 次
  • 性别: 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入门及实战V1.6.1-2018最新

    Flink入门及实战最新内容分享,包含Flink基本原理及应用场景、Flink vs storm vs sparkStreaming、Flink入门案例-wordCount、Flink集群安装部署standalone+yarn、Flink-HA高可用、Flink scala shell代码调试

    flink零基础入门.pdf

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

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

    "**Flink原理与实践-PPT课件.rar**" 这个标题表明,这个压缩包包含的是一份关于Apache Flink的PPT教学资料,主要讲解了Flink的基础理论和实际应用。Flink是大数据处理领域的一个流处理框架,它以实时处理和低延迟...

    flink入门到精通视频教程

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

    最全面的flink入门编程案例

    【标题】:“最全面的Flink入门编程案例” 在大数据处理领域,Apache Flink是一个流行的开源流处理框架,它提供了一种低延迟、高吞吐量的数据处理能力,支持批处理和流处理两种模式。本篇文章将深入浅出地引导初学...

    Flink示例源码-Flink入门

    "Flink示例源码-Flink入门"是一个旨在帮助初学者理解并掌握Flink核心概念和功能的资源包。在这个压缩包中,我们可能会找到一些精心设计的Flink示例代码,这些代码将有助于我们了解如何使用Flink进行数据处理。 首先...

    flink学习资料(包含网盘视频地址)

    Flink学习资料压缩包提供了全面了解和掌握Apache Flink这一大数据处理框架的资源。Flink是一种开源流处理和批处理系统,它在实时数据处理领域表现出色,具有低延迟、高吞吐量以及状态管理等特性。以下是压缩包内可能...

    大数据处理框架:Flink:FlinkSQL入门与实践.docx

    大数据处理框架:Flink:FlinkSQL入门与实践.docx

    Flink入门教程

    ### Flink入门教程知识点解析 #### 一、Flink开发环境搭建 **1. 必备工具** - **Java1.8版本**:Apache Flink 支持 Java 和 Scala 编程语言,并且需要 Java 环境来运行。官方推荐使用 Java 1.8 或更高版本。 - *...

    Apache Flink:FlinkSQL从入门到实践详解

    最后探讨了如何通过 FlinkSQL 处理发现实时和批量数据分析的应用实例,包括性能优化及良好实践。面向具备初步 Apache Flink 知识的技术人员和数据科学家。 适用人群:已经有一定 Apache Flink 基础并希望进一步提升...

    Flink入门宝典

    ### Flink入门宝典知识点详解 #### 一、Flink开发环境搭建 **Apache Flink** 是一个开源的流处理框架,它支持批量处理和事件驱动的实时数据流处理。为了能够有效地学习并使用Flink,搭建一个合适的开发环境至关...

    flink框架入门介绍和示例程序

    **Flink框架入门介绍** Apache Flink是一款开源的流处理和批处理框架,它在大数据领域...在实际操作中,你可以结合`Flink入门介绍.xmind`文件,它可能是一个思维导图,帮助你系统地理解和掌握Flink框架的各个部分。

    flink入门实战

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

    Flink入门案例程序(中华石杉的课堂代码)

    **Flink入门案例程序概述** 本教程主要针对的是Apache Flink初学者,通过中华石杉提供的课堂代码,我们将深入理解Flink的核心概念和技术。Apache Flink是一个开源的流处理和批处理框架,它以强大的实时数据处理能力...

    Flink入门及实战-下.pptx

    ### Flink 入门及实战知识点详解 #### 一、Flink API 抽象级别概述 Flink 提供了多种 API 抽象级别,以适应不同的应用场景和需求。主要包括: - **DataStream API**:适用于批处理和流处理,提供丰富的转换操作。 ...

    Flink入门与实战配套java源码

    《Flink入门与实战配套Java源码》是一个针对Apache Flink初学者和实践者的宝贵资料,它包含了使用Java编程语言实现的各种Flink示例。Apache Flink是一个流行的开源流处理和批处理框架,专为实时数据处理而设计,提供...

    从0到1学Flink,入门教程典范

    文档标题“从0到1学Flink,入门教程典范”表明了这是一份针对初学者的入门教程,旨在帮助学习者系统性地了解Flink的基础知识,并能在此基础上深入学习更高级的概念。 ### Flink Runtime机制 Flink Runtime是Flink...

    Flink从入门到开发实战视频教程

    3. **作业提交**:讲解如何将编写好的Flink程序提交到集群运行。 4. **监控与调试**:如何查看Flink作业的运行状态,以及遇到问题时如何进行调试。 四、实战项目 视频教程可能会包含一些实战项目,如实时日志分析...

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

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

    Flink原理、实战与性能优化.pdf

    Flink的实战应用涵盖从简单的数据监控到复杂的机器学习模型构建,无论是在传统企业应用还是在大数据实时分析中,Flink都提供了一个高效、可扩展的解决方案。同时,Flink的性能优化策略,如良好的内存管理和容错机制...

Global site tag (gtag.js) - Google Analytics