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

现有的开源计算方案,会把流处理和批处理作为两种不同的应用类型,因为他们所提供的SLA(Service-Level-Aggreement,服务等级协议) 是完全不相同的:

(1)、流处理一般需要支持低延迟、Exactly-once 保证

(2)、批处理需要支持高吞吐、高效处理。

Flink 从另一个视角看待流处理和批处理,将二者统一起来:

(1)、Flink是完全支持流处理,也就是说作为流处理看待时输入数据流是无界的

(2)、批处理被作为一种特殊的流处理,只是它的输入数据流被定义为有界的。

flink的一些实现细节和原理相关

两个分类:

1、flink的架构分析

standalone:

YARN;
resourcemanager
nodemanager

mareduce v1:
jobtracker
tasktracker

spark:
master
worker

flink
jobmanager
taskmanager

以上这些集群都是属于管理资源和分配资源给对应的提交的应用程序执行的

所有的主节点都是:(管理者)
管理所有从节点的状态
分配对应的资源给应用程序去执行

所有的从节点都是:(工作者)
提供资源,然后汇报自己的状态给主节点
派发任务下来,由每个从节点执行

主管资源 Resouce...
主管调度 Scheduler
关于主控程序管理相关
ApplicationMaster
....

hadoop能否被取代?

hdfs
yarn
mapreduce 太慢,功能上有一定的缺陷
执行效率低,编码复杂,只能做离线批处理

hive-2.x
mapreduce
tez
spark

一个分布式计算引擎是一定要去考虑shuffle的
但是不是说,所有的应程序都一定会要进行shuffle

spark各模块的依赖关系:
spark core: 核心实现
sparksql: 处理结构化数据, 基于spark core
sparkstreaming: 构建流式应用程序,基于spark core
structured streaming: 构建流式应用程序,基于spark sql

YARN:
资源单位:container 默认1G

Flink
资源单位:slot
根据两个因素来决定slot的内存多大:

一个taskamanager的内存:a
一个taskmanager的slot数量: b

一个slot的内存: a/b

由每隔slot占用多少内存来倒推应该设置a和b是多少

64G 8G内操作系统
4G 其他程序

52G:
每个slot: 1G内存
taskManager 的slot数量: 52个


ChainOperator

backend
pressure

反压

JobGraph

2、flink的四大特性

flink:有状态的分布式计算引擎

checpoint
保存状态 到 HDFS
分布式快照
snapshot id 管理者:jobmanager去管理
barriers 屏障

state
ValueState
ListState
MapState
快照

window

滚动窗口: 没有数据被重复消费
每隔4s钟统计过去4s内数据的xx结果
滑动窗口
每隔4s钟统计过去6s内数据的xx结果
会话窗口
碰到有相邻两条数据超过指定的某个时间差距,就切开形成两个不同的会话

时间 time
数量 count

spark窗口计算的重点:

基于时间的滑动窗口

需求:
每隔4s钟统计过去6s内数据的xx结果

new StreamingContext(2s)
window(windowTime, slideTime)
6 4

车流量

time

event time 事件时刻:当前这个日志生成的时刻
ingest time 进入flink应用程序的时刻
process time 计算的时刻

watermark
水位线

主要用来计算无序的,延迟抵达的数据

aggregateByKey(状态)((旧状态,值) => 新状态, (状态,状态) => 状态)
aggregateByKey(C)((C,V) => C, (C,C) => C)

state

窗口计算

updateStateByKey

window

ValueState 存储一个值
ListState 存储一堆值
MapState 存储一堆key-vlaue类型的值

服务降级:

at least once

Fllink学习的更多相关文章

  1. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  2. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  3. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  4. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. Unity3d学习 制作地形

    这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...

  7. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  8. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  9. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

随机推荐

  1. 两台Linux系统之间传输文件的几种方法

    两台Linux系统之间传输文件的几种方法:参考https://www.cnblogs.com/bignode/articles/9241333.html

  2. 微信小程序云开发-数据库-用户更新数据并提交

    一.wxml增加input输入框和[更新商品价格]按钮 在商品详情页新增[更新商品价格]按钮,wxml新增部分代码,input绑定事件,用于获取用户输入的内容.按钮绑定事件,用于更新商品价格.  二. ...

  3. 八大排序算法~冒泡排序【加变量flag的作用】

    八大算法~冒泡排序[加变量flag的作用] 1,冒泡排序思想:从第一个数开始找,要把大数"排除在外"~为大数找后座.(从小到大排序哈) 外层循环~需要放后的大数个数: 内循环~从第 ...

  4. visibility:hidden和display:none的区别

    一.相同点 disable:none和visibility:hidden都能把网页上的某元素隐藏起来 二.不同点 display:none--不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失. ...

  5. Ubuntu 20.04 安装kodi播放器

    打开终端,执行命令在线安装 sudo apt-get install software-properties-common sudo add-apt-repository ppa:team-xbmc/ ...

  6. vant vue 屏幕自适应

    手机端 pc端 屏幕自适应 一.新建 vue.config.js项目目录中没有 vue.config.js 文件,需要手动创建,在根目录中创建 vue.config.js const pxtorem ...

  7. 简明易懂,将细节隐藏,面向新手树立web开发概念——学完Java基础语法,超快速上手springboot+mybatiJavaWeb开发

    简明易懂,将细节隐藏,面向新手树立web开发概念 --学完Java基础语法,超快速上手JavaWeb开发 Web本质(先忽视各种协议) Web应用可以理解为浏览器和服务器之间的交互. 我们可以看一个简 ...

  8. 网络编程之TCP客户端开发和TCP服务端开发

    开发 TCP 客户端程序开发步骤 创建客户端套接字对象 和服务端套接字建立连接 发送数据 接收数据 关闭客户端套接字 import socket if __name__ == '__main__': ...

  9. 洛谷P5691题解

    题面 本人用的是暴力分类讨论 + \(unordered\_map\) 存储,与所有的题解都不同. 因为 \(n \leq 6\) ,非常的小,并且我不想写 DFS,所以直接暴力分类讨论 \(n=1, ...

  10. C++ //深拷贝与浅拷贝 //浅拷贝 : 简单的赋值拷贝操作 //深拷贝: 在堆区重新申请空间 进行拷贝操作

    1 //深拷贝与浅拷贝 2 3 //浅拷贝 : 简单的赋值拷贝操作 4 //深拷贝: 在堆区重新申请空间 进行拷贝操作 5 6 7 #include <iostream> 8 using ...