如何学习Flink?
对于一门计算机技术来说,如何快速学习上手呢?具体的逻辑是什么呢?我认为有以下几条
- 了解技术的应用场景
- 技术的基本概念,如何使用,以及如何部署(针对大数据组件而言)
- 技术的功能特点
- 技术源码,优缺点
知识图谱详解
核心概念
- Flink的核心概念实际上是流式处理的概念,对于流式数据来说最重要的就是时间
- Time类型Processing TimeEvent TimeIngestion Time
- Watermark 这是Flink的一个难点,在此我想强调的是很多人翻译为水印,对新手有误导作用,译做水位更为合理,Watermark实质上就是一个时间戳,具体场景可以简化为如何处理迟到的数据,由于在分布式环境下,会受到网络等影响,数据并不能按时到达,于是就有了watermark机制,在此做简单说明,图谱每个节点我都会出详细文章说明,对于小白而言,我们首先要了解的是这个东西到底是干什么的,而不是一头扎进去研究,了解---应用--剖析是一个更合理的路线
- Trigger 触发器又是什么呢?上文中提到watermark是为了迟到的数据,触发器实际上是决定数据处理完后什么时候落地的
- State什么是状态?这其实是流式数据的特性,计算数据处理的中间结果,举个例子,agg操作中state会记录中间聚合的结果 为什么需要有? 记录状态的目的是为了恢复或者重启任务,试想一下,流数据任务过程突然挂了怎么办?有了中间的结果记录,不久能够做到快速恢复任务?
- 区别(面试常问)核心:
- Flink是标准的流式处理引擎,基于数据驱动,把批处理看作流处理的一种特殊情况,Spark恰恰相反,Spark是微批处理模型,把无界的流处理划分为一个一个的阶段,缩小为一系列的批次,有一个形象的比喻,对于微积分来说,就是划分为一个一个有界的面积进行逼近计算的。
- 架构:Spark是Driver master worker executor,Flink则是JobManager TaskManager Client
- 时间:Spark只支持处理时间,Flink支持处理事件,事件时间,注入时间,同时有watermark处理滞后数据
- 容错【大数据核心】:Spark无法做到仅消费一次,Flink可以做到
特性
特性分为两点,API和架构
- 对于数据处理引擎来说,我们需要解决的问题就是计算,所以核心就是在哪进行计算?计算任务如何找到相应的资源,这就是架构做的事情,核心就是 资源和任务的匹配 API
- 老生常谈就是对数据进行的操作,毕竟谁不是调参小能手呢
- SQL/Table API :Table API 和 SQL 借助了 Apache Calcite 来进行查询的解析,校验以及优化。它们可以与 DataStream 和 DataSet API 无缝集成,并支持用户自定义的标量函数,聚合函数以及表值函数。
- DataStream APIDataStream API 为许多通用的流处理操作提供了处理原语。这些操作包括窗口、逐条记录的转换操作,在处理事件时进行外部数据库查询等ProcessFunction是 Flink 所提供的最具表达力的接口。
- ProcessFunction 可以处理一或两条输入数据流中的单个事件或者归入一个特定窗口内的多个事件。它提供了对于时间和状态的细粒度控制
- 是否有些深奥?这三者的区别在哪里?在这里可以简单的认为DataStream是ProcessFunction封装好的黑盒操作,通过提供一些已经写好的算子,用户直接调用就可以,但缺点也是显而易见的,它并不能满足所有自定义的需求,也就是无法细粒度的处理,这时候就需要实现底层的ProcessFunction
- Task 真正干活的单位,经过一系列请求过后,Task匹配到资源执行,我们知道,大数据之一就是体现在数据量大,那么对于巨大的数据量来说,就出现了一下几个问题
- 如何划分Task呢?
- Task的多少和什么有关的?
- Task挂了怎么办?如何恢复任务呢
状态
- 什么是状态?这也是初学者最容易懵逼的地方
- 状态有哪些种类,存在哪?谁又在管理状态呢?这就是状态管理 状态存储 状态种类
- 区别?种类多种,管理方式多样,存储介质多种,区别在哪里?如何选择?
- 状态的用途呢?存储干嘛?这就牵扯到上文我们提到了疑问,Task挂了怎么办呢?这就牵扯到状态容错
- 状态容错的机制是什么?checkpoint?那checkpoint的底层实现又是什么呢?
libraries
这里的重难点是CEP
- 什么是CEP? CEP是Flink相当nice的功能,它的语义是复杂事件处理,什么,听不懂?举个例子对于常见的电商平台,是根据用户停留时长,收藏,加购,点击次数来判断用户是否喜欢这个东西,那我们如何定义满足这一条件的函数呢?CEP就派上了用场
- Gelly图处理 对于初学者来说其实没必要涉及
监控
对于大数据组件来说,长链路如何确保整个环节都没有问题呢?那就需要监控出马了,点一点,看看web UI就可以更直观的看到任务运行情况,方便定位数据处理过程中的问题
源码解析(吹牛篇)
众所周知,面试官最喜欢的就是问你,熟悉某个技术的源码吗?熟悉源码对于面试来说是有相当的优势,功利性来说,源码对于初学者的用途更多在于面试,在这个模块,我将会列出Flink源码解析的例子,帮助大家了解源码【吹牛】
落地实践
你会Spark Flink Hadoop,精通源码,但一问到如何针对应用场景进行方案设计,就傻眼了,我就只会写SQL,写scala代码,统计指标,这远远是不够的,技术是为业务服务的,没有业务也就何谈什么技术?这一章我会据一些具体公司实践已经常见的应用场景
总结
这只是一个思维导图,也就是个启蒙贴,以疑问为主,主要是为了让大家思考为什么这样做?这些年见多很多的面试者,背书很溜,原理也能巴拉巴拉说出来,一问道为什么这样做就傻眼了,这多半是面经看多了,面试造火箭,入职只会拧螺丝 。只有知道why才能更好做到 对技术的理解
接下来,我会为大家更新思维导图知识点的详细扩展,希望大家支持丫
写在最后
本文中的图可能不太清晰,不太清楚是什么原因造成的,获取高清大图麻烦私信我 回复 思维导图 获取