分享

Flink入门简介一



问题导读

1.什么是Apache Flink
2.Apache Flink应用领域有哪些?
3.Flink & Storm & SparkStreaming 三者的区别是什么?



一 Flink架构相关概念

架构图


20191208202650743.png

处理无界和有界数据

任何类型的数据都是作为事件流产生的。信用卡交易,传感器测量,机器日志或网站或移动应用程序上的用户交互,所有这些数据都作为流生成。

数据可以作为无界流或有界流处理。

  • 无界流有一个起点,但没有定义的终点。它们不会终止并在生成数据时提供数据。无限制的流必须被连续处理,即,事件被摄取后必须立即处理。无法等待所有输入数据到达,因为输入是无界的,并且在任何时间都不会完成。处理无限制的数据通常要求以特定顺序(例如事件发生的顺序)提取事件,以便能够推断出结果的完整性。

  • 有界流具有定义的开始和结束。可以通过在执行任何计算之前提取所有数据来处理有界流。由于有界数据集始终可以排序,因此不需要有序摄取即可处理有界流。绑定流的处理也称为批处理。


Apache Flink擅长处理无边界和有边界的数据集。对时间和状态的精确控制使Flink的运行时能够在无限制的流上运行任何类型的应用程序。有界流由专门为固定大小的数据集设计的算法和数据结构在内部进行处理,从而产生出色的性能。

在任何地方部署应用程序

  • Apache Flink是一个分布式系统,需要计算资源才能执行应用程序。Flink与所有常见的群集资源管理器(如Hadoop YARN,Apache Mesos和Kubernetes)集成,但也可以设置为作为独立群集运行。

  • Flink旨在与前面列出的每个资源管理器配合使用。这是通过特定于资源管理器的部署模式实现的,该模式允许Flink以其惯用方式与每个资源管理器进行交互。

  • 部署Flink应用程序时,Flink会根据应用程序配置的并行性自动识别所需的资源,并向资源管理器请求它们。如果发生故障,Flink会通过请求新资源来替换发生故障的容器。提交或控制应用程序的所有通信均通过REST调用进行。这简化了Flink在许多环境中的集成。



任意规模运行应用程序

Flink旨在运行任何规模的有状态流应用程序。将应用程序并行化为可能在群集中分布并同时执行的数千个任务。因此,应用程序几乎可以利用无限数量的CPU,主内存,磁盘和网络IO。而且,Flink易于维护非常大的应用程序状态。它的异步和增量检查点算法可确保对处理延迟的影响最小,同时可保证一次状态一致性。

用户报告了其生产环境中运行的Flink应用程序的可伸缩性数字,例如

  • 每天处理数万亿事件的应用程序,
  • 维护多个TB状态的应用程序,以及
  • 运行在数千个内核上的应用程序。


利用内存性能

有状态Flink应用程序针对本地状态访问进行了优化。任务状态始终保持在内存中,或者,如果状态大小超出可用内存,则始终保持在访问有效的磁盘数据结构中。因此,任务通过访问通常处于内存中的状态来执行所有计算,从而产生非常低的处理延迟。Flink通过定期将本地状态异步指向持久性存储,从而确保在故障情况下一次准确的状态一致性。


20191208200052961.png

二 应用领域

  • 流应用程序的构建块


流处理框架可以构建和执行的应用程序的类型由框架控制流,状态和时间的能力定义。




显然,流是流处理的基本方面。但是,流可能具有不同的特性,这些特性会影响流的处理方式。
Flink是一个通用的处理框架,可以处理任何类型的流。

  • 状态


每个非平凡的流应用程序都是有状态的,即,仅对单个事件应用转换的应用程序不需要状态。
任何运行基本业务逻辑的应用程序都需要记住事件或中间结果,以便在以后的某个时间点访问它们.
例如,在收到下一个事件时或在特定的持续时间之后。
应用程序状态是Flink中的一等公民。通过查看Flink在状态处理上下文中提供的所有功能

  • 时间


时间是流应用程序的另一个重要组成部分。大多数事件流具有固有的时间语义,因为每个事件都是在特定的时间点产生。
此外,许多常见的流计算都是基于时间的,例如窗口聚合,会话化,模式检测和基于时间的联接。
流处理的一个重要方面是应用程序如何测量时间,即事件时间与处理时间之差。

  • 分层API


Flink提供了三层API。每个API在简洁性和表达性之间提供了不同的权衡,并且针对不同的用例。


20191208201010755.png

  • ProcessFunctions


ProcessFunctions是Flink提供的最具表现力的功能接口。Flink提供了ProcessFunctions来处理来自一个或两个输入流或分组在一个窗口中的事件的单个事件。ProcessFunctions提供对时间和状态的细粒度控制。ProcessFunction可以任意修改其状态并注册计时器,这些计时器将来会触发回调函数。因此,ProcessFunctions可以根据许多有状态事件驱动的应用程序的需要实现复杂的每事件业务逻辑。

三 运作方式

Apache Flink是用于无限制和有限制的数据流上的有状态计算的框架。由于许多流应用程序的设计目的是在最少的停机时间内连续运行,因此流处理器必须提供出色的故障恢复能力,以及在运行时监视和维护应用程序的工具。
Apache Flink将重点放在流处理的操作方面。在这里,我们将说明Flink的故障恢复机制,并介绍其功能来管理和监督正在运行的应用程序


不间断运行应用程序24/7

机器和过程故障在分布式系统中无处不在。像Flink这样的分布式流处理器必须从故障中恢复,才能运行24/7的流应用程序。
显然,这不仅意味着失败后重新启动应用程序,而且还确保其内部状态保持一致,使应用程序可以像从未发生过失败那样继续进行处理。

Flink提供了一些功能来确保应用程序保持运行并保持一致:

  • 一致的检查点:Flink的恢复机制基于应用程序状态的一致的检查点。如果发生故障,将重新启动应用程序,并从最新的检查点加载其状态。与可重置的流源结合使用时,此功能可以保证一次状态一致性。

  • 高效的检查点:如果应用程序的状态保持TB级,则对应用程序的状态进行检查会非常昂贵。Flink可以执行异步和增量检查点,以使检查点对应用程序延迟SLA的影响很小。

  • 端到端精确一次:Flink具有特定存储系统的事务接收器,即使在发生故障的情况下,也可以保证数据仅被精确地写入一次。

  • 与集群管理器集成:Flink与集群管理器紧密集成,例如Hadoop YARN,Mesos或Kubernetes。当流程失败时,新流程将自动开始以接管其工作。

  • 高可用性设置:Flink具有高可用性模式,可消除所有单点故障。HA模式基于Apache ZooKeeper,这是一项经过实践检验的服务,可实现可靠的分布式协调。



更新,迁移,暂停和恢复应用程序

需要维护支持关键业务服务的流应用程序。需要修复错误,并需要改进或实现新功能。但是,更新有状态流应用程序并非易事。通常,一个人无法简单地停止应用程序并重新启动一个固定或改进的版本,因为一个人无法承受失去应用程序状态的负担。

Flink的保存点是一项独特而强大的功能,可以解决更新有状态应用程序的问题以及许多其他相关挑战。保存点是应用程序状态的一致快照,因此与检查点非常相似。但是,与检查点相比,保存点需要手动触发,并且在停止应用程序时不会自动将其删除。保存点可用于启动状态兼容的应用程序并初始化其状态。保存点启用以下功能

  • 应用程序演化:保存点可用于演化应用程序。可以从先前版本的应用程序中获取的保存点重新启动应用程序的固定版本或改进版本。也可以从较早的时间点启动应用程序(如果存在这样的保存点),以修复有缺陷的版本产生的错误结果。


  • 集群迁移:使用保存点,可以将应用程序迁移(或克隆)到不同的集群。
Flink版本更新:可以使用保存点迁移应用程序以在新的Flink版本上运行。


  • 应用程序缩放:保存点可用于增加或减少应用程序的并行性。

A / B测试和假设方案:可以通过从同一保存点启动所有版本来比较应用程序的两个(或多个)不同版本的性能或质量。

  • 暂停和恢复:可以通过保存一个点并停止它来暂停应用程序。在以后的任何时间点,都可以从保存点恢复应用程序。

归档:可以将保存点归档,以便将应用程序的状态重置为较早的时间点。

监视和控制应用程序

就像其他任何服务一样,需要监视连续运行的流应用程序并将其集成到组织的操作基础架构(即监视和日志记录服务)中。
监视有助于预测问题并提前做出反应。通过日志记录可以进行根本原因分析以调查故障。易于访问的界面是控制运行中的应用程序的重要功能。

Flink与许多常用的日志记录和监视服务很好地集成在一起,并提供REST API来控制应用程序和查询信息。

  • Web UI:Flink具有Web UI,可检查,监视和调试正在运行的应用程序。它也可以用于提交执行以执行或取消执行。


  • 日志记录:Flink实现了流行的slf4j日志记录接口,并与日志记录框架log4j或logback集成。


  • 指标:Flink具有完善的指标系统,可收集和报告系统和用户定义的指标。指标可以导出到多个报告器,包括JMX,Ganglia,Graphite,Prometheus,StatsD,Datadog和Slf4j。


  • REST API:Flink公开REST API来提交新应用程序,获取正在运行的应用程序的保存点或取消应用程序。REST API还公开了正在运行或已完成的应用程序的元数据和收集的指标。


四 Flink & Storm & SparkStreaming 区别

  • Strom:纯实时处理数据,吞吐量小 --水龙头滴水


  • SparkStreaming : 准实时处理数据,微批处理数据,吞吐量大 --河道中开闸关闸


  • Flink:纯实时处理数据,吞吐量大 --河流远远不断


  • MR & Flink & Storm & SparkStreaming 对比



2019120820314219.jpg
五 Flink 中 Scala /java/Maven 版本匹配

Flink使用java语言开发,提供了scala编程的接口。
使用java或者scala开发Flink是需要使用jdk8版本。
如果使用Maven,maven版本需要使用3.0.4及以上。


20191208203331858.png





最新经典文章,欢迎关注公众号



---------------------

作者:时间静止不是简史
来源:csdn
原文:Flink——运行在数据流上的有状态计算框架和处理引擎


没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条