热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flink第一章的简介

Flink简介1.1Flink的引入这几年大数据的飞速发展,出现了很多热门的开源社区,其中著名的有Hadoop、Storm,以及后来的Spark,他们都有着各自专注的应用场景。

Flink 简介
1.1 Flink 的引入
这几年大数据的飞速发展,出现了很多热门的开源社区,其中著名的有 Hadoop、Storm, 以及后来的 Spark,他们都有着各自专注的应用场景。Spark 掀开了内存计算的先河,也以 内存为赌注,赢得了内存计算的飞速发展。 Spark 的火热或多或少的掩盖了其他分布式计 算的系统身影。就像 Flink,也就在这个时候默默的发展着。 在国外一些社区,有很多人将大数据的计算引擎分成了 4 代,当然,也有很多人不会 认同。我们先姑且这么认为和讨论。
首先第一代的计算引擎,无疑就是 Hadoop 承载的 MapReduce。这里大家应该都不会对 MapReduce 陌生,它将计算分为两个阶段,分别为 Map 和 Reduce。对于上层应用来说,就 不得不想方设法去拆分算法,甚至于不得不在上层应用实现多个 Job 的串联,以完成一个 完整的算法,例如迭代计算。
由于这样的弊端,催生了支持 DAG 框架的产生。因此,支持 DAG 的框架被划分为第二 代计算引擎。如 Tez 以及更上层的 Oozie。这里我们不去细究各种 DAG 实现之间的区别, 不过对于当时的 Tez 和 Oozie 来说,大多还是批处理的任务。
接下来就是以 Spark 为代表的第三代的计算引擎。第三代计算引擎的特点主要是 Job 内部的 DAG 支持(不跨越 Job),以及强调的实时计算。
特点:批处理、流处理、SQL 高层 API 支持,自带 DAG 内存迭代计算、性能较之前大幅提升。
==Flink 的诞生就被归在了第四代。==这应该主要表现在 Flink 对流计算的支持,以及更 一步的实时性上面。当然 Flink 也可以支持 Batch 的任务,以及 DAG 的运算。首先,我 们可以通过下面的性能测试初步了解两个框架的性能区别,它们都可以基于内存计算框架进 行实时计算,所以都拥有非常好的计算性能。经过测试,Flink 计算性能上略好。 特点:批处理、流处理、SQL 高层 API 支持,自带 DAG,流式计算性能更高、可靠性更高。
测试环境:
1.CPU:7000 个;
2.内存:单机 128GB;
3.版本:Hadoop 2.3.0,Spark 1.4,Flink 0.9
4.数据:800MB,8GB,8TB;
5.算法:K-means:以空间中 K 个点为中心进行聚类,对最靠近它们的对象归类。通过 迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。
6.迭代:K=10,3 组数据。
在这里插入图片描述
Spark 和 Flink 全部都运行在 Hadoop YARN 上,性能为 Flink > Spark > Hadoop(MR), 迭代次数越多越明显,性能上,Flink 优于 Spark 和 Hadoop 最主要的原因是 Flink 支持 增量迭代,具有对迭代自动优化的功能。
Flink 和 spark 的差异:
在这里插入图片描述
1.2 什么是 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 被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。
1.3 Flink 流处理特性



  1. 支持高吞吐、 低延迟、 高性能的流处理

  2. 支持带有事件时间的窗口(Window) 操作

  3. 支持有状态计算的 Exactly-once 语义

  4. 支持高度灵活的窗口(Window) 操作, 支持基于 time、 count、 session,以及 data-driven 的窗口操作

  5. 支持具有 Backpressure 功能的持续流模型

  6. 支持基于轻量级分布式快照(Snapshot) 实现的容错

  7. 一个运行时同时支持 Batch on Streaming 处理和 Streaming 处理 8) Flink 在 JVM 内部实现了自己的内存管理

  8. 支持迭代计算

  9. 支持程序自动优化: 避免特定情况下 Shuffle、 排序等昂贵操作, 中间结果有 必要进行缓存
    1.4 Flink 基石
    Flink 之所以能这么流行,离不开它最重要的四个基石:Checkpoint、State、Time、 Window
    首 先 是 Checkpoint 机 制 , 这 是 Flink 最 重 要 的 一 个 特 性 。 Flink 基 于 Chandy-Lamport 算法实现了一个分布式的一致性的快照, 从而提供了一致性的语义。 Chandy-Lamport 算法实际上在 1985 年的时候已经被提出来, 但并没有被很广泛的应用, 而 Flink 则把这个算法发扬光大了。Spark 最近在实现 Continue streaming, Continue streaming 的目的是为了降低它处理的延时,其也需要提供这种一致性的语义, 最终采用 Chandy-Lamport 这个算法, 说明 Chandy-Lamport 算法在业界得到了一定的肯定。
    提供了一致性的语义之后, Flink 为了让用户在编程时能够更轻松、 更容易地去管理 状态,还提供了一套非常简单明了的 State API, 包括里面的有 ValueState、 ListState、 MapState,近期添加了 BroadcastState, 使用 State API 能够自动享受到这种一致性的 语义。
    除此之外,Flink 还实现了 Watermark 的机制,能够支持基于事件的时间的处理,或 者说基于系统时间的处理, 能够容忍数据的延时、 容忍数据的迟到、 容忍乱序的数据。 另外流计算中一般在对流数据进行操作之前都会先进行开窗, 即基于一个什么样的窗口上 做这个计算。 Flink 提供了开箱即用的各种窗口, 比如滑动窗口、 滚动窗口、 会话窗口 以及非常灵活的自定义的窗口。
    在这里插入图片描述
    1.5 批处理与流处理
    批处理的特点是有界、 持久、 大量, 批处理非常适合需要访问全套记录才能完成的 计算工作,一般用于离线统计。 流处理的特点是无界、 实时, 流处理方式无需针对整个 数据集执行操作, 而是对通过系统传输的每个数据项执行操作, 一般用于实时统计。
    Flink 是如何同时实现批处理与流处理的呢? 答案是, Flink 将批处理( 即处理有 限的静态数据)视作一种特殊的流处理
    在这里插入图片描述
    从下⾄上:
    1、部署: Flink ⽀持本地运⾏、能在独⽴集群或者在被 YARN 或 Mesos 管理的集群上运 ⾏,也能部署在云上。
    2、运⾏: Flink 的核⼼是分布式流式数据引擎,意味着数据以⼀次⼀个事件的形式被处理。
    3、API: DataStream、 DataSet、 SQL API。
    4、扩展库: Flink 还包括⽤于复杂事件处理,机器学习,图形处理。
    上图为 Flink 技术栈的核心组成部分, 值得一提的是, Flink 分别提供了面向流式 处理的接口(DataStream API) 和面向批处理的接口(DataSet API)
    Flink 提供了封装在 Runtime 执行引擎之上的 API, 以帮助用户方便地生成流式计算程序。 Flink 提供了用于流处理的 DataStream API 和用 于批处理的 DataSetAPI。值得注意的是,尽管 Flink Runtime 执行引擎是基于流处理的, 但是 DataSet API 先于 DataStream API 被开发出来, 这是因为工业界对无限流处理的需 求在 Flink 诞生之初并不大。DataStream API 可以流畅地分析无限数据流, 并且可以用 Java 或者 Scala 来实现。 开发人员需要基于一个叫 DataStream 的数据结构来开发, 这 个数据结构用于表示永不停止的分布式数据流。


推荐阅读
  • 在Hive中合理配置Map和Reduce任务的数量对于优化不同场景下的性能至关重要。本文探讨了如何控制Hive任务中的Map数量,分析了当输入数据超过128MB时是否会自动拆分,以及Map数量是否越多越好的问题。通过实际案例和实验数据,本文提供了具体的配置建议,帮助用户在不同场景下实现最佳性能。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 深入浅析JVM垃圾回收机制与收集器概述
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》的阅读心得进行整理,详细探讨了JVM的垃圾回收机制及其各类收集器的特点与应用场景。通过分析不同垃圾收集器的工作原理和性能表现,帮助读者深入了解JVM内存管理的核心技术,为优化Java应用程序提供实用指导。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • 本文探讨了 Java 中 Pair 类的历史与现状。虽然 Java 标准库中没有内置的 Pair 类,但社区和第三方库提供了多种实现方式,如 Apache Commons 的 Pair 类和 JavaFX 的 javafx.util.Pair 类。这些实现为需要处理成对数据的开发者提供了便利。此外,文章还讨论了为何标准库未包含 Pair 类的原因,以及在现代 Java 开发中使用 Pair 类的最佳实践。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
  • PHP中元素的计量单位是什么? ... [详细]
author-avatar
娜娜的乖宝宝699
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有