【Flink】使用之前,先简单了解一下Flink吧!
Flink简单介绍
概述
在使用Flink之前,我们需要大概知道Flink是什么?
首先,从Flink的官网可以有一个简单的了解:Apache Flink 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。
这里了解过大数据的可以看到几个熟悉的词,分布式处理、内存计算,首先分布式处理是大数据集群最常见的,也是必备的处理方式,其次,内存计算也不难让人想到现在很火的Spark,至少通过这个词肯定可以联想到Flink处理任务的速度一定也很快。
那么,什么是无边界和有边界数据流呢?
无边界数据流和有边界数据流
- 无边界数据流 | Unbounded Stream
官方的定义:有定义流的开始,但没有定义流的结束。它们会无休止地产生数据。无界流的数据必须持续处理,即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理,因为输入是无限的,在任何时候输入都不会完成。处理无界数据通常要求以特定顺序摄取事件,例如事件发生的顺序,以便能够推断结果的完整性。 - 有边界数据流 | Bounded Stream
官方的定义:有定义流的开始,也有定义流的结束。有界流可以在摄取所有数据后再进行计算。有界流所有数据可以被排序,所以并不需要有序摄取。有界流处理通常被称为批处理。

技术栈核心组成

从上图可以看出,底层是Flink的集群部署选择,不仅可以运行在包括 YARN、 Mesos、Kubernetes 在内的多种资源管理框架上,还支持在裸机集群上独立部署。在启用高可用选项的情况下,它不存在单点失效问题。
核心计算架构是Runtime执行引擎,它是一个分布式系统,能够接 受数据流程序并在一台或多台机器上以容错方式执行。
DataStream API用于流处理,DataSet API用于批处理。
- 流处理特性
1.支持高吞吐、低延迟、高性能的流处理
2.支持带有事件时间的窗口(Window)操作
3.支持有状态计算的 Exactly-once 语义
4.支持高度灵活的窗口(Window)操作,支持基于 time、count、session,以及 data-driven 的窗口操作
5.支持具有 Backpressure 功能的持续流模型
6.支持基于轻量级分布式快照(Snapshot)实现的容错
7.一个运行时同时支持 Batch on Streaming 处理和 Streaming 处理
8.Flink 在 JVM 内部实现了自己的内存管理
9.支持迭代计算
10.支持程序自动优化:避免特定情况下 Shuffle、排序等昂贵操作,中间结果有必要进行缓存 - 批处理特性
1.有界、持久、大量
2.适合需要访问全套记录才能完成的计算工作,一般用于离线统计
Flink和Spark有一点最明显的不同,就是 Spark应对批处理和流处理采用了不同的技术框架,批处理由SparkSQL实现,流处理由Spark Streaming实现。Flink则可以做到同时实现批处理和流处理, 它的解决办法就是将批处理(即处理有限的静态数据)视作是一种特殊的流处理。
Flink支持的拓展库涉及机器学习(FlinkML)、复杂事件处理(CEP)、图计算(Gelly) 和分别针对流处理与批处理的 Table API。
架构体系
重要角色
- JobManager
可以认为是Spark中的Master,用于调度task,协调检查点,协调失败时的恢复等。至少要存在一个Master处理器,高可用模式下会存在多个Master,一个是leader,剩下的是standby。 - TaskManager
可以认为是Spark中的Worker,用于执行一个dataflow中的task或者特殊的subtask、数据缓冲和data stream的交换。至少要存在一个Worker处理器。
Flink与Spark架构概念转换

【Flink】使用之前,先简单了解一下Flink吧!的更多相关文章
- Flink on Yarn三部曲之三:提交Flink任务
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 「Flink」使用Java lambda表达式实现Flink WordCount
本篇我们将使用Java语言来实现Flink的单词统计. 代码开发 环境准备 导入Flink 1.9 pom依赖 <dependencies> <dependency> < ...
- Flink数据流图的生成----简单执行计划的生成
Flink的数据流图的生成主要分为简单执行计划-->StreamGraph的生成-->JobGraph的生成-->ExecutionGraph的生成-->物理执行图.其中前三个 ...
- Flink源码阅读(一)——Flink on Yarn的Per-job模式源码简析
一.前言 个人感觉学习Flink其实最不应该错过的博文是Flink社区的博文系列,里面的文章是不会让人失望的.强烈安利:https://ververica.cn/developers-resource ...
- Flink学习之路(一)Flink简介
一.什么是Flink? Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,提供支持流处理和批处理两种类型应用的功能. 二.Flink特点 1.现有的开源计算方案,会把流处 ...
- Flink整合面向用户的数据流SDKs/API(Flink关于弃用Dataset API的论述)
动机 Flink提供了三种主要的sdk/API来编写程序:Table API/SQL.DataStream API和DataSet API.我们认为这个API太多了,建议弃用DataSet API,而 ...
- Flink应用案例:How Trackunit leverages Flink to process real-time data from industrial IoT devices
January 22, 2019Use Cases, Apache Flink Lasse Nedergaard Recently there has been significant dis ...
- Flink源码学习笔记(3)了解Flink HA功能的实现
使用Flink HA功能维护JobManager中组件的生命周期,可以有效的避免因为JobManager 进程失败导致任务无法恢复的情况. 接下来分享下 Flink HA功能的实现 大纲 基于Zook ...
- flink入门:01 构建简单运行程序
1. mac平台安装flink(默认最新版) brew install apache-flink 安装结果: Version 1.7.1, commit ID: 89eafb4 2. jdk版本,我尝 ...
随机推荐
- linux下DNS服务器搭建,正反向解析配置
dns服务器之前自己搭建玩过,一段时间不搞,加上当时没写文档,基本忘光光了,这次老实了,写个文档记下来,方便以后查阅. 1.服务器准备 为了避免不必要的问题,关闭防火墙,关闭selinux,hosts ...
- Python爬取养眼图片
1.准备 各位绅士们,你可能会觉得疫情在家无聊,那么现在我们的Python语言可以满足你们的需求.项目需要的工具(1)Python3(2)requests库requests库可以通过代码pip ins ...
- Linux学习笔记(五)搜索命令
搜索命令 whereis which locate find whereis 英文原意:locate the binary,source,and manual page files for a com ...
- 从零开始学习docker之在docker中运行springboot项目
一.docker环境配置 首先需要一个安装了docker的服务器(本地或者云服务器),如果没有请看上文,传送门---https://www.cnblogs.com/wdfordream/p/12737 ...
- hadoop 伪分布配置
配置 Hadoop 伪分布式 任务配置说明: VMware 15 Centos 6.5 java -jdk 1.8 hadoop-2.6.0-cdh5.14.0.tar.gz 第一步 自行安装虚拟机 ...
- python 携程asyncio实现高并发示例1
import asyncio #携程(携程不是函数) async def print_hello(): while True: print("hello world") await ...
- ORM之单表、多表操作
参考1 参考2 表与表之间的关系: 一对一(OneToOneField):一对一字段无论建在哪张关系表里面都可以,但是推荐建在查询频率比较高的那张表里面 一对多(ForeignKey):一对多字段建在 ...
- node 搭载本地代理,处理web本地开发跨域问题
var path = require('path') var httpProxy = require('http-proxy') var express = require('express') va ...
- MySQL数据库缓存操作
安装: 启动的话: -d:以后台的方式进行: -l:选择监听指定的ip服务地址:-m:给他分配多大的内存:-p:端口号默认的端口为11211的服务端口: 另一个: 安装:telnet 这个可以用来测试 ...
- serialize和json_encode 区别
(1)serialize主要用于php的序列化,存储到文件或者数据库中,json_encode 也是序列化,但是 主要用于与其他语言比如js进行交互使用,对于传输来说,json有许多优点. (2)在显 ...