您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

一文读懂流式计算框架Flink

时间:2019-11-11 14:09:13  来源:  作者:
一文读懂流式计算框架Flink

 

随着互联网的不断发展,行业内对于数据的处理能力和计算的实时性要求都在不断增加,随之而来的是计算框架的升级。经过了十余年开源社区的不断演进,现在计算框架已经从第一代的雅虎开源的Hadoop体系进化到目前主流的Spark框架,这两套框架的计算主要是从强依赖硬盘存储能力的计算发展到了内存计算,大大增强了计算力。下一代计算引擎,也就是第三代计算引擎,将会从计算实时性的角度突破,也就是今天要讲到的Flink框架,本文将从简入深的介绍Flink框架的特点。

一文读懂流式计算框架Flink

 

基本架构

一文读懂流式计算框架Flink

 

​调度层面Flink支持本地运行以及分布式运行两种,分布式运行可以跑在目前主流的基于Yarn体系中,也可以跑在目前业内最主流的K8S中,Flink本质上还是专注于做计算框架的部分,应用于目前行业内主流的调度引擎上而确保一个分布式的计算能力。


在核心层主要做的是一件事是如何对流式任务进行编排,流式任务不同于离线任务的最大一个特点在于任务编排上面,比如我们有三个事件分别叫1、2、3。在离线任务中,事件运行是有先后顺序的,比如要先运行1再运行2接着运行3,在流式任务场景下这种事件只有逻辑上的先后关系,实际上是同时触发并执行的。

一文读懂流式计算框架Flink

 

​API层面稍后单独用一个模块讲解,在Library方面内置了图计算算法包Gelly和机器学习包FlinkML以及CEP。其中Gelly和FlinkML是基于DataSet API进行开发的,而DataSet API是一个离线批计算的接口,所以本质上Gelly和FlinkML并没有发挥Flink这个天然流式框架的优势。个人觉得,Flink作为Apache相对比较年轻的开源计算框架,对于一些组件化的支持还不完善,相比于Spark生态还有比较大的差距。后续如果能基于Flink Stream API开发出流式的上层应用,会成为Flink的一大亮点。

分布式架构层面Flink和Spark或者Hadoop区别不大,整体框架是:

一文读懂流式计算框架Flink

 

​由Flink的Client向Job Master提交任务,Job Master作为整个集群的管理节点。Task Manager是Slave的角色,负责底层的运算工作。Job Master控制整个计算任务的Checkpoint的进度。Task Manager间可以通过数据流的方式交换数据,同时Task Manager在任务的并行化计算方面比MapReduce做的更好,Flink Task Manager是采用多线程的机制进行并行化数据计算,而传统的MapReduce方法采用的是JVM进程的形式。

开发接口架构

作为一个算法发烧友,我还是愿意花更多的篇幅来介绍如何基于Flink框架进行开发。首先看下开放编程接口的API上下游站位关系,

一文读懂流式计算框架Flink

 

最上一层是Flink SQL,这一层其实是一个上级封装,了解机器学习或者其它更复杂编程模型的同学应该比较清楚,并不是所有的逻辑都能通过SQL来实现。不过目前绝大部分的数据实时处理逻辑通过SQL这一层就可以解决。

TableAPI这一级可以看出Flink要实现流批一体化的野心,Flink希望可以在流式DataStream API和离线DataSet API之上做一层封装,对用户暴露更多复杂计算的函数,同时基于这一层API实现的功能可以完成流批一体。这个设想是很好的,不过目前还有很多功能没办法在这一级实现,也导致了TableAPI的尴尬。

DataStream和DataSet仍是目前的主流编程接口,如果希望在Flink中实现诸如机器学习算法这样负责逻辑的函数,还是要依赖于这一层。至于Runtime内核开发,这个明显是留给非常资深的高级用户来使用,大部分的开发应该不会触碰。

如何做流式编程

重点讲下DataStream这个开发接口,首先Flink把流式编程模型切分为DataSource模块、Transformation模块和DataSink模块。DataSource和DataSink分别对应着数据的流入和流出。

在DataSource和Sink模块,Flink都原生支持了Apache体系内的很多产品的I/O,比如Kafka Connector和Elastic Search Connector等等。同时在数据接入导出方面还内置了很多数据源,

  • readFile接口可以实现读写一些CSV、TXT本地文件
  • Socket数据源可以接收来自其它服务的数据,这个接口非常好,可以让Flink和许多主流的Restful服务适配

在Transformation模块,DataStream提供了诸如map、FlatMap、Filter、Reduce、KeyBy这些函数,我个人感觉Flink的这些接口使用起来还是比较方便的,比如要把下面这个二元组类型的数据都+1,

只需要使用map函数作如下处理:

流式编程的时间概念与Watermark

流式开发和离线开发的最大区别在于对于数据时间的理解上,离线开发针对的都是有边界数据,有边界的意思是在开发过程中会用到的数据是有限的。而流式应用,因为数据是实时流入的,所以对应的数据是无边界的。以机器学习算法为例,经常需要缓冲一部分数据求区间内的最大值和最小值,那么在无边界数据条件下如何处理呢?这里就应用到了watermark功能。

首先介绍下几个时间的概念:

  • Event Time是数据在业务方的真实发生时间,比如某个手机在2019-03-05下午2点被购买,这个时间就是Event Time
  • Ingestion Time指的是数据进入Flink系统的时间,理论上会比Event Time晚一点
  • Processing Time:数据在当前系统被处理的时间,也就是Flink worker机器的时间,这个是Flink系统的默认时间

所以从概念层面理解,用Flink去处理业务最合适的时间是Event Time,而系统默认使用Processing Time是一种简化方法,因为流式数据在录入Flink系统的过程中会出现时间乱序。


接着介绍下Window和Watermark的概念,当系统按照Processing Time去流式处理数据的时候,假设某个流式算法需要缓冲5分钟的数据算一次Loss,这个5分钟就是一个Window窗口。但是当5分钟已经结束了,还是没有数据流入计算引擎,这个时候怎么办?接着等还是执行下一个操作。这就用到了Watermark,当等待时间超过Watermark的设定时间,系统就会自动触发计算,无论数据是否满足Window的要求。

一文读懂流式计算框架Flink

 

写到做后

本文是我学习了Flink的一些资料之后的笔记,可以作为对Flink框架的一个大体了解。其实随着互联网业务的不断发展和计算框架的普及,后续各种广告推荐、商品推荐、金融风控相关的业务都会逐渐从传统的离线计算向流式计算转型。未来Flink在数据业务领域大有可为,期待接下来产业计算的框架升级。



Tags:Flink   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
导读:本文我们将重点介绍集群运行时中ResourceManager的设计和实现,了解如何通过ResourceManager对集群的计算资源进行有效管理。作者:张利兵来源:华章科技 01 ResourceManager...【详细内容】
2021-08-23  Tags: Flink  点击:(79)  评论:(0)  加入收藏
简介: 新的接入方案在接入成本、接入延迟上都有了较为明显的优化效果,减轻了对统一调度系统的负载压力,并具备了端到端的业务对账能力。在公司开源协同的大背景下,TDBank的hive...【详细内容】
2020-11-18  Tags: Flink  点击:(107)  评论:(0)  加入收藏
1、场景描述例如订单库进行了分库分表,其实例如下图所示: 现在的需求是希望创建一个任务就将数据同步到MQ集群,而不是为每一个数据库实例单独创建一个任务,将其数据导入到MQ集...【详细内容】
2020-11-16  Tags: Flink  点击:(310)  评论:(0)  加入收藏
目前在唯品会实时平台并不是一个统一的计算框架,而是包括Storm,Spark,Flink在内的三个主要计算框架,这是由于历史原因形成。实时平台的职责主要包括实时计算平台和实时基础数据...【详细内容】
2020-10-13  Tags: Flink  点击:(124)  评论:(0)  加入收藏
Flink是什么?Flink是一个框架,是一个用于有限(bounded)或者无限(unbounded)数据流上进行有状态计算的分布式处理引擎。处理框架Flink的软件栈如图一所示,其核心是distributed dataf...【详细内容】
2020-08-31  Tags: Flink  点击:(110)  评论:(0)  加入收藏
如何学习Flink?对于一门计算机技术来说,如何快速学习上手呢?具体的逻辑是什么呢?我认为有以下几条 了解技术的应用场景 技术的基本概念,如何使用,以及如何部署(针对大数据组件而...【详细内容】
2020-08-15  Tags: Flink  点击:(84)  评论:(0)  加入收藏
本文主要从以下几个方面介绍Flink的流处理API——Source一、从集合中读取数据二、从文件中读取数据三、从Kafka中读取数据四、自定义Source数据处理的过程基本可...【详细内容】
2020-08-11  Tags: Flink  点击:(74)  评论:(0)  加入收藏
实时数仓建设目的解决传统数仓的问题实时数仓是一个很容易让人产生混淆的概念。实时数仓本身似乎和把 PPT 黑色的背景变得更白一样,从传统的经验来讲,我们认为数仓有一个很重...【详细内容】
2020-08-03  Tags: Flink  点击:(24)  评论:(0)  加入收藏
1. 目标在本教程中,我们将讨论Apache Spark和Apache Flink之间的比较。Apache spark和Apache Flink都是用于大规模批处理和流处理的开源平台,为分布式计算提供容错和数据分布...【详细内容】
2020-07-31  Tags: Flink  点击:(108)  评论:(0)  加入收藏
导读:Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态计算。可部署在各种集群环境,对各种大小的数据规模进行快速计算。滴滴基于 Apac...【详细内容】
2020-05-04  Tags: Flink  点击:(84)  评论:(0)  加入收藏
▌简易百科推荐
近日只是为了想尽办法为 Flask 实现 Swagger UI 文档功能,基本上要让 Flask 配合 Flasgger, 所以写了篇 Flask 应用集成 Swagger UI 。然而不断的 Google 过程中偶然间发现了...【详细内容】
2021-12-23  Python阿杰    Tags:FastAPI   点击:(6)  评论:(0)  加入收藏
文章目录1、Quartz1.1 引入依赖<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version></dependency>...【详细内容】
2021-12-22  java老人头    Tags:框架   点击:(12)  评论:(0)  加入收藏
今天来梳理下 Spring 的整体脉络啦,为后面的文章做个铺垫~后面几篇文章应该会讲讲这些内容啦 Spring AOP 插件 (了好久都忘了 ) 分享下 4ye 在项目中利用 AOP + MybatisPlus 对...【详细内容】
2021-12-07  Java4ye    Tags:Spring   点击:(14)  评论:(0)  加入收藏
&emsp;前面通过入门案例介绍,我们发现在SpringSecurity中如果我们没有使用自定义的登录界面,那么SpringSecurity会给我们提供一个系统登录界面。但真实项目中我们一般都会使用...【详细内容】
2021-12-06  波哥带你学Java    Tags:SpringSecurity   点击:(18)  评论:(0)  加入收藏
React 简介 React 基本使用<div id="test"></div><script type="text/javascript" src="../js/react.development.js"></script><script type="text/javascript" src="../js...【详细内容】
2021-11-30  清闲的帆船先生    Tags:框架   点击:(19)  评论:(0)  加入收藏
流水线(Pipeline)是把一个重复的过程分解为若干个子过程,使每个子过程与其他子过程并行进行的技术。本文主要介绍了诞生于云原生时代的流水线框架 Argo。 什么是流水线?在计算机...【详细内容】
2021-11-30  叼着猫的鱼    Tags:框架   点击:(21)  评论:(0)  加入收藏
TKinterThinter 是标准的python包,你可以在linx,macos,windows上使用它,你不需要安装它,因为它是python自带的扩展包。 它采用TCL的控制接口,你可以非常方便地写出图形界面,如...【详细内容】
2021-11-30    梦回故里归来  Tags:框架   点击:(27)  评论:(0)  加入收藏
前言项目中的配置文件会有密码的存在,例如数据库的密码、邮箱的密码、FTP的密码等。配置的密码以明文的方式暴露,并不是一种安全的方式,特别是大型项目的生产环境中,因为配置文...【详细内容】
2021-11-17  充满元气的java爱好者  博客园  Tags:SpringBoot   点击:(25)  评论:(0)  加入收藏
一、搭建环境1、创建数据库表和表结构create table account(id INT identity(1,1) primary key,name varchar(20),[money] DECIMAL2、创建maven的工程SSM,在pom.xml文件引入...【详细内容】
2021-11-11  AT小白在线中  搜狐号  Tags:开发框架   点击:(29)  评论:(0)  加入收藏
SpringBoot开发的物联网通信平台系统项目功能模块 功能 说明 MQTT 1.SSL支持 2.集群化部署时暂不支持retain&will类型消 UDP ...【详细内容】
2021-11-05  小程序建站    Tags:SpringBoot   点击:(56)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条