1.1、Flink引入
数据质量监控平台告警模块:
1、监控平台的告警部分,负责采集到的监控数据会直接往 kafka 里塞
2、flink这边需要从 kafka topic 里面实时读取到监控数据,并将读取到的监控数据做一些 聚合/转换/计算 等操作,
3、将计算后的结果与告警规则的阈值进行比较,然后做出相应的告警措施(钉钉群、邮件、短信、电话等)。
- 典型应用场景
1.2、Flink和Spark区别
- 根本区别:
- Flink理念:批是流的特例,每一条数据都能触发计算
- Spark理念:流是批的特例,靠时间积攒数据触发计算
(1)Micro Batching模式
- 架构实现:有一个自然流数据流入系统进行攒批的过程,这在一定程度上增加了延时
(2)Native Streaming模式
- 架构实现:每条数据到来都进行计算,计算延时性能更低
1.2、架构体系
- Flink本身用Java和Scala实现的,因此所有组件都是基于JVM(Java虚拟机)
(1)JobManager
- 也称之为 Master,用于协调分布式执行,它们用来调度 task,协调检查点,协调失败时恢复等,高可用模式会有多个master处理器(主备)。
Ⅰ、ResourceManager:负责管理Flink的处理资源单元——TaskManager Slot,当JobManager申请TaskManager slot时,ResourceManger会指示一个拥有空闲slot的TaskManager将其slot提供给JobManager;
Ⅱ、Dispatcher:并不是必需的组件,跨多个作业运行,它提供了一个REST接口来让我们提交需要执行的应用,一旦某个应用提交执行,则Dispatcher会启动一个JobManager并将应用转交给它。
Ⅲ、JobMaster:负责管理一个单一的执行JobGraph,多个作业可以在Flink集群中同时运行,每个作业都有自己的JobMaster,总是有一个JobManager。
(2)TaskManagers
- 称之为 Worker, 用于执行一个 dataflow 的 task(或者特殊的 subtask)、 数据缓冲和 datastream 的交换, Flink 运行时至少会存在一个 worker 处理器。
1.3、部署模式
(1)Local模式
在开发学习中使用,该模式下Flink整体运行在Single JVM中。
(2)Cluster模式
在生产环境的集群模式,既可以Standalone的方式进行部署,也可以与其他资源系统进行集成部署,比如Yarn进行集成。
- Standalone Cluster模式
- HA方案部署
(3)Cloud模式
在云产品上部署。
1.4、类库&算子
(1)类库
- CEP - 复杂事件处理类库,核心是一个状态机,广泛应用于事件驱动的监控预警类业务场景。
- ML - 机器学习类库,机器学习主要是识别数据中的关系、趋势和模式,一般应用在预测类业务场景。
- GELLY - 图计算类库,图计算更多的是考虑边和点的概念,一般被用来解决网状关系的业务场景。
(2)算子
- 从数据流分类
- 单流处理:一个数据源
- 多流处理:多个数据源
(3)多流操作
-
将多流转换为单流
- UNION:将多个字段类型一直数据流合并为一个数据流
- JOIN:将多个数据流(数据类型可以不一致)连接为一个数据流
(4)单流操作
- 将多流变单流后按数据的输入输出不同归类
1.5、基本概念
(1)数据流处理相关
- Stream Dataflow:流处理过程;
- Source Operator:从数据源提取数据的操作叫做;
- Tranformation Operators:中间的map(),聚合、统计等操作
- sink operators:最后结果数据的流出
(2)数据流划分相关
- stream partitions:数据流分区划分
- operator subtasks:并行计算数,由operators划分,在不同的机器或容器中分不同的线程独立运行;
(3)数据流在Operator传递相关
- one-to-one 模式:两个operator用此模式传递的时候,会保持数据的分区数和数据的排序;
- Redistributing 模式:这种模式会改变数据的分区数;每个一个operator subtask会根据选择transformation把数据发送到不同的目标subtasks,比如keyBy()会通过hashcode重新分区,broadcast()和rebalance()方法会随机重新分区;
(4)Workers, Slots, Resources
-
每一个TaskManager是个jvm,每个jvm中可以执行一个或者多个subtasks,jvm中taskSlot的数量决定了接受多少个task
-
每个tasksolt都有固定的资源,比如TaskManager有三个task solts,taskManager把平均把管理的内存分配到三个task slot中,这样solt中的task不会跟其他的job竞争资源;默认上Flink许可subtasks去分享同一个是slots;但要保证这些subtask是不同的task,并且来自相同的Job;极端情况下,一个slot中执行整个job的task;solt分享有两个重要的好处: