Flink从入门到放弃(入门篇1)-Flink是什么
本文是例行介绍,熟悉的直接跳过 - 鲁迅
鲁迅: ...
大纲
入门篇:
放弃篇:
图片显示不了,戳这里:
https://github.com/wangzhiwubigdata/God-Of-BigData/blob/master/Flink
Flink是什么
一句话概括
Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,提供支持流处理和批处理两种类型应用的功能。
前身
Apache Flink 的前身是柏林理工大学一个研究性项目, 在 2014 被 Apache 孵化器所接受,然后迅速地成为了Apache Software Foundation的顶级项目之一。
特点
现有的开源计算方案,会把流处理和批处理作为两种不同的应用类型:流处理一般需要支持低延迟、Exactly-once保证,而批处理需要支持高吞吐、高效处理。
Flink是完全支持流处理,也就是说作为流处理看待时输入数据流是无界的;批处理被作为一种特殊的流处理,只是它的输入数据流被定义为有界的。
Flink组件栈
)
Deployment层
主要涉及了Flink的部署模式,Flink支持多种部署模式:本地、集群(Standalone/YARN)、云(GCE/EC2)
Runtime层
Runtime层提供了支持Flink计算的全部核心实现,比如:支持分布式Stream处理、JobGraph到ExecutionGraph的映射、调度等等,为上层API层提供基础服务
API层
API层主要实现了面向无界Stream的流处理和面向Batch的批处理API,其中面向流处理对应DataStream API,面向批处理对应DataSet API
Libaries层
- 在API层之上构建的满足特定应用的实现计算框架,也分别对应于面向流处理和面向批处理两类
- 面向流处理支持:CEP(复杂事件处理)、基于SQL-like的操作(基于Table的关系操作)
- 面向批处理支持:FlinkML(机器学习库)、Gelly(图处理)
Flink的优势
- 支持高吞吐、低延迟、高性能的流处理
- 支持高度灵活的窗口(Window)操作
- 支持有状态计算的Exactly-once语义
- 提供DataStream API和DataSet API
Flink基本编程模型
- Flink程序的基础构建模块是流(streams) 与 转换(transformations)
- 每一个数据流起始于一个或多个 source,并终止于一个或多个 sink
下面是一个由Flink程序映射为Streaming Dataflow的示意图:
并行数据流示意图:
Flink基本架构
- Flink是基于Master-Slave风格的架构
- Flink集群启动时,会启动一个JobManager进程、至少一个TaskManager进程
JobManager
- Flink系统的协调者,它负责接收Flink Job,调度组成Job的多个Task的执行
- 收集Job的状态信息,并管理Flink集群中从节点TaskManager
TaskManager
- 实际负责执行计算的Worker,在其上执行Flink Job的一组Task
- TaskManager负责管理其所在节点上的资源信息,如内存、磁盘、网络,在启动的时候将资源的状态向JobManager汇报
Client
- 用户提交一个Flink程序时,会首先创建一个Client,该Client首先会对用户提交的Flink程序进行预处理,并提交到Flink集群
- Client会将用户提交的Flink程序组装一个JobGraph, 并且是以JobGraph的形式提交的
最后
本文是例行介绍,熟悉的直接跳过。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Flink从入门到放弃-大纲
入门篇大纲 放弃篇大纲
- 下一篇
Flink从入门到放弃(入门篇3)-DataSetAPI
首先我们来看一下编程结构: 编程结构 public class SocketTextStreamWordCount { public static void main(String[] args) throws Exception { if (args.length != 2){ System.err.println("USAGE:\nSocketTextStreamWordCount <hostname> <port>"); return; } String hostName = args[0]; Integer port = Integer.parseInt(args[1]); final StreamExecutionEnvironment env = StreamExecutionEnvironment .getExecutionEnvironment(); DataStream<String> text = env.socketTextStream(hostName, port); DataStream<Tuple2<Strin...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8编译安装MySQL8.0.19
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Red5直播服务器,属于Java语言的直播服务器
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题