Flink知识图谱

如何学习Flink?
对于一门计算机技术来说,如何快速学习上手呢?具体的逻辑是什么呢?我认为有以下几条

  • 了解技术的应用场景
  • 技术的基本概念,如何使用,以及如何部署(针对大数据组件而言)
  • 技术的功能特点
  • 技术源码,优缺点

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
  • 老生常谈就是对数据进行的操作,毕竟谁不是调参小能手呢

Flink知识图谱

文章插图
 
  • 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挂了怎么办?如何恢复任务呢
状态
  • 什么是状态?这也是初学者最容易懵逼的地方