首页 » 2020年9月

了解流式系统(Stream System)的概念

1. 什么是流式系统?----一个设计用来处理 无限数据(infinite 表示很多,极大) 的处理引擎。

  • 数据的两个重要维度

    • cardinality 基数---可以分为有界数据(Bounded)和无限数据(Unbounded)
    • constitution 物理结构、组成-----可分为Table类型(常规mysql用的就是)和Stream类型(一个元素挨着一个元素element-by-elment)---Map Reduce 系列常用

2. 流处理系统---为了取代lamda那令人诟病的双模型结构,需要两样武器

  • 正确性Correctness

    • 正确性可以让你对待batch一样进行流处理
    • 正确性是一致性存储的基础

Flink 架构由四部分组成:Job Manager 、Resource Manager 、Task Manager 、Dispatcher

architecture

1.作业管理器 Job Manager

Job Manager ---是控制单个应用(application)运行的Master 进程。每个应用只能由不同的JobManager管理

  • 每个应用---由一个所谓的Job Graph(逻辑图) 和一个jar(包含依赖库和资源)组成
  • Job Manger 会转换Job Graph 到一个可以物理执行的图( a physical dataflow graph),也叫ExecutionGraph
  • ExecutionGraph 包含可以并行执行的Task
  • Job Manger 会向Resource manager 请求必要的资源----任务管理槽(TaskManager slots)来执行task
  • 当Job Manger 接收到足够的任务管理槽,它就会发送ExecutionGraph 的task 到Task Manager 执行。
  • 执行期间,Job Manger是一个中央协调器,负责所有的中央协调(center coordination)

2. 资源管理器 Resource Manager

Flink 拥有多种ResourceManager,比如YARN,K8s,MESOS,还有独立部署(StandAlone deployment)

  • 资源管理器,用来管理任务管理器槽(task manager slots)----Flink的处理资源单元(unit)
  • 资源管理器在资源不够的时候,让资源提供者(Resource provider)提供更多的容器来启动TaskManger。也可以关闭闲置的Task Manager占用的资源。

3.任务管理器TASK Manager

任务管理器是FLink的工作进程(work process,相对于job Manager的master process)

  • 每个Task manager提供一定数量的槽,来决定可以运行的task数目
  • Task Manager会注册自己的槽给Resource Manager
  • Job Manger 会根据Task Manager的槽数分配任务给他
  • 相同应用的Task Manager 之间可以交换数据

4.分发器Dispatcher

分发器提供Rest 接口来提交任务,也提供面板(dashboard)来展示运行情况

  • 分发器用来穿过防火墙
  • 分发器不是必须的

最近工作上用到flink,需要对flink学习和研究

1. 流处理的历史

第一代:lamda

  • 在批处理基础上加了流式处理,如图

图片1

  • 缺点1:同样的逻辑要在离线和实时处理引擎写一遍
  • 缺点2:实时处理是近似值,不是精确值
  • 缺点3:管理维护麻烦

第二代2013:提供了---运行一次(exactly once)保证

  • 从低级api提供高级api
  • 为了失败保证,延迟从毫秒到秒级别
  • 结果仍然依赖事件的时间(timing)和顺序(Order)

第三代2015:解决了对时间和顺序的依赖

  • 利用exactly once,第一次提供了,精确和一致性结果
  • 可以像实时Live Data那样处理历史数据。
  • 不再是高并发和低延迟权衡(trade off),而是两者都要保证

除了以上点,流处理还逐渐加入了下面特性:

  • 高可用
  • 和资源管理器(Resource Manager) 高度集成,yarn,k8s
  • 无缝迁移job到另一个流处理引擎,不丢失现有状态

2. Flink

Flink就是第三代流处理器的一中

  • 加入了:事件时间(event time) 和处理时间(processing time) 语义,event-time语义提供精确性和一致性结果(即使是乱序事件);Processing time 用来延迟要求非常低的场景
  • 仅一次(Exactly once)保证
  • 百万/千万数据,毫秒级别延迟
  • 提供分层的API。如DataStream API和Processing functions(windows函数,异步操做和精确时间和状态函数),关系API,linq式的table api
  • 连接器(Connectors)---涵盖大部分存储系统---kafka,es,jdbc,hdfs,s3等
  • 没有单点失败:高可用,7*24小时,非常低的downtime, 紧密集成yarn,k8s,mesos,可以快速从失败恢复,动态扩展job的运行环境
  • 可以更改job的code,或者迁移job到不同的集群,而不丢失状态
  • 详细,且可以自定义系统运行指标metrics,提前发现问题
  • flink也可以是一个完整功能的离线处理引擎
  • 开发人员友好,可以用ide调试(可以把flink所有模块运行到一个jvm里面)

创建flutter项目卡在create project

是因为网络不通,在windows环境下,我的电脑---系统属性---环境配置

加入两个环境变量:

FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn 

PUB_HOSTED_URL=https://pub.flutter-io.cn