Flink概述

一、Flink 是什么


Flink 起源于 Stratosphere 项目, Stratosphere 是在 2010~2014 年由 3 所地处柏林的大学和欧洲的一些其他的大学共同进行的研究项目, 2014 年 4 月 Stratosphere 的代 码 被 复 制 并 捐 赠 给 了 Apache 软 件 基 金 会 , 参 加 这 个 孵 化 项 目 的 初 始 成 员 是Stratosphere 系统的核心开发人员, 2014 年 12 月, Flink 一跃成为 Apache 软件基金会的顶级项目。

在德语中, Flink 一词表示快速和灵巧, 项目采用一只松鼠的彩色图案作为 logo,这不仅是因为松鼠具有快速和灵巧的特点, 还因为柏林的松鼠有一种迷人的红棕色,而 Flink 的松鼠 logo 拥有可爱的尾巴, 尾巴的颜色与 Apache 软件基金会的 logo 颜色相呼应, 也就是说, 这是一只 Apache 风格的松鼠。

在这里插入图片描述

Flink 项目的理念是: “ Apache Flink 是为分布式、 高性能、 随时可用以及准确的流处理应用程序打造的开源流处理框架” 。
Apache Flink 是一个框架和分布式处理引擎, 用于对无界有界数据流进行有状态计算。 Flink 被设计在所有常见的集群环境中运行, 以内存执行速度任意规模来执行计算。
在这里插入图片描述

  • 关键概念分解
    • 分布式:程序分布于集群中并发执行
    • 高性能:拥有内存执行速度及以任意规模来执行计算
    • 随时可用:良好的容灾,高可用HA的部署确保Flink集群7x24小时可用
    • 有界流:处理的数据处于一个时间范围内,即有开始时间和结束时间。用于微批处理。
    • 无界流:处理的数据一旦数据产生后,便源源不断地被处理,有开始无结束。用于实时计算。
    • 有状态:被处理地数据及其中间结果将被标记下来,用状态来记录,并缓存状态信息。
      在这里插入图片描述

二、为什么要用 Flink


  • 能真实反应生活实况且符合当前系统追求的目标

    • 流式数据更能真实反应现实生活(实时性好,真实反应当前所属状态)
    • 传统的数据架构是基于有限数据集的(类似抽样调查)
    • 系统追求的目标
      Ø 低延迟
      Ø 高吞吐
      Ø 结果的准确性和良好的容错性
  • 适配多种行业,应用面广泛

    • 电商和市场营销
      Ø 数据报表、广告投放、业务流程需要
    • 物联网(IOT)
      Ø 传感器实时数据采集和显示、实时报警,交通运输业
    • 电信业
      Ø 基站流量调配
    • 银行和金融业
      Ø 实时结算和通知推送,实时检测异常行为
  • 国内大企业争相使用
    在这里插入图片描述

  • Flink 的全球热度处于上升趋势,尤其在中国热度最高
    在这里插入图片描述

三、流处理的演变发展


  • 传统数据处理架构

    • 事务处理
      在这里插入图片描述
    • 分析处理
      将数据从业务数据库复制到数仓,再进行分析和查询。如下图所示:
      在这里插入图片描述
  • 流处理的演变

    • lambda 架构
      用两套系统,同时保证低延迟和结果准确,如下图所示:
      在这里插入图片描述
  • Flink流式架构涵盖微批和实时分析
    在这里插入图片描述

四、Flink 的主要特点


  • 事件驱动(Event-driven)
    在这里插入图片描述

  • 基于流的处理
    在 Flink 的世界观中,一切都是由流组成的,离线数据是有界的流;
    实时数据是一个没有界限的流:这就是所谓的有界流和无界流;
    在这里插入图片描述

  • 分层API,灵活性强
    越顶层越抽象,表达含义越简明,使用越方便
    越底层越具体,表达能力越丰富,使用越灵活
    在这里插入图片描述

  • 部署方式多样

    Apache Flink是一个分布式系统,需要计算资源才能执行应用程序。Flink集成了所有常见的集群资源管理器,如Hadoop YARN、Apache Mesos和Kubernetes,但也可以设置为作为一个独立的集群运行。Flink的设计可以很好地运行前面列出的每个资源管理器。这是通过特定于资源管理器的部署模式实现的,该模式允许Flink以其惯用的方式与每个资源管理器进行交互。在部署Flink应用程序时,Flink根据应用程序配置的并行性自动识别所需的资源,并从资源管理器请求这些资源。在失败的情况下,Flink通过请求新的资源来替换失败的容器。所有提交或控制应用程序的通信都是通过REST调用进行的。这简化了Flink在许多环境中的集成。

  • 可运行任何规模的应用程序

    Flink设计用于在任何规模下运行有状态的流媒体应用程序。应用程序被并行化为可能有数千个任务,这些任务分布在一个集群中并发地执行。因此,应用程序可以利用几乎无限数量的cpu、主内存、磁盘和网络IO。此外,Flink很容易维护非常大的应用程序状态。它的异步和增量检查点算法确保对处理延迟的影响最小,同时保证恰好一次的状态一致性。用户报告了在他们的生产环境中运行的Flink应用程序令人印象深刻的可伸缩性数字,例如应用程序每天处理数万亿次事件,应用程序维护数tb的状态,应用程序运行在数千个核上。

  • 可充分利用内存性能

    有状态Flink应用程序针对本地状态访问进行了优化。任务状态总是在内存中维护,如果状态大小超过可用内存,则在访问效率高的磁盘数据结构中维护。因此,任务通过访问本地(通常在内存中)的状态来执行所有的计算,从而产生非常低的处理延迟。Flink通过定期和异步地将本地状态检查点指向持久存储,从而保证了在发生故障时的一次状态一致性。
    在这里插入图片描述

  • Flink其他特性
    • 支持事件时间(event-time)和处理时间(processing-time)语义
    精确一次(exactly-once)的状态一致性保证
    低延迟,每秒处理数百万个事件,毫秒级延迟
    • 与众多常用存储系统的连接
    • 高可用,动态扩展,实现7*24小时全天候运行

五、Flink vs Spark Streaming


  • 流(stream)和微批(micro-batching)

  • 微批处理模式
    在这里插入图片描述

  • 本地流处理模式
    在这里插入图片描述

  • 数据模型

    • spark 采用 RDD 模型,spark streaming 的 DStream 实际上也就是一组 组小批数
      据 RDD 的集合
    • flink 基本数据模型是数据流,以及事件(Event)序列
  • 运行时架构

    • Spark 是批计算,将 DAG 划分为不同的 stage,一个完成后才可以计算下一个(stage串行)
    • flink 是标准的流执行模式,一个事件在一个节点处理完后可以直接发往下一个节点进行处理
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若兰幽竹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值