目录

架构

应用

状态

时间

分层API

运维


架构

Flink是一个分布式数据流处理引擎,用于处理带状态的有边界或无边界数据流。可以部署在通用的分布式集群上,实现海量数据在内存上快速计算。

无边界数据流:数据有产生标志但是没有结束标志。数据持续产生,因此需要连续地处理,只能通过一定的方法根据事件的产生和结束进行分割处理。

有边界数据流:数据可以明确的产生开始和结束标志,处理时一般不需要顺序处理,因为有边界数据流一般是按顺序产生的,可以用批处理的方法进行处理。

Flink通过精确的控制状态和时间实现对无边界数据流的处理;通过内部处理算法和数据结构,灵活控制固定数据集的大小实现对有边界数据流的处理。

Flink 是分布式系统,运行时需要计算资源,可以部署在Hadoop YARN, Apache Mesos, Kubernetes上,同时也可以以standalone的方式单独部署。

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

应用

Flink是用于无限制和有限制的数据流上的有状态计算的框架。 Flink在不同的抽象级别提供了多个API,并为常见用例提供了专用的库。以下描述数据流处理中基本的术语定义

流是流处理的基本方面。 但是,流可能具有不同的特性,这些特性会影响流的处理方式。 Flink是一个通用的处理框架,可以处理任何类型的流。如有边界或无边界流,实时流和记录

状态

每个非普通的流应用程序都是有状态的,即,仅对各个事件应用转换的应用程序不需要状态。 任何运行基本业务逻辑的应用程序都需要记住事件或中间结果,以便在以后的某个时间点访问它们,例如,在收到下一个事件时或在特定的持续时间之后。

应用程序状态是Flink中的一等公民。 通过查看Flink在状态处理上下文中提供的所有功能,您可以看到这一点。

多个状态原语:Flink为不同的数据结构(例如原子值,列表或映射)提供状态原语。开发人员可以根据功能的访问模式选择最有效的状态原语。

可插拔状态后端:在可插拔状态后端中管理应用程序状态,并由该点检查点。 Flink具有不同的状态后端,这些后端将状态存储在内存或RocksDB(一种高效的嵌入式磁盘数据存储)中。自定义状态后端也可以插入。

严格一次状态一致性:Flink的检查点和恢复算法可确保发生故障时应用程序状态的一致性。因此,可以透明地处理故障,并且不会影响应用程序的正确性。

非常大状态:Flink由于具有异步和增量检查点算法,因此能够保持大小为数TB的应用程序状态。

可扩展的应用程序:Flink通过将状态重新分配给更多或更少的工作程序来支持有状态应用程序的扩展。

时间

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

Flink提供了一组丰富的与时间相关的功能。

事件时间模式:使用事件时间语义处理流的应用程序根据事件的时间戳计算结果。因此,无论是处理记录的事件还是实时事件,事件时间处理都可以提供准确一致的结果。

水印支持:Flink在事件时间应用程序中使用水印推理时间。水印还是一种权衡结果的延迟和完整性的灵活机制。

后期数据处理:在带有水印的事件时间模式下处理流时,可能会发生所有相关事件到达之前已经完成计算的情况。这种事件称为迟发事件。 Flink具有多个选项来处理较晚的事件,例如通过侧面输出重新路由它们并更新先前完成的结果。

处理时间模式:除事件时间模式外,Flink还支持处理时间语义,该语义执行由处理机的挂钟时间触发的计算。处理时间模式可能适合具有严格的低延迟要求的某些应用程序,这些应用程序可以忍受近似结果。

分层API

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

1、过程函数(The ProcessFunctions):

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

2、DataStream API

DataStream API 为许多通用的流处理操作提供了处理原语。这些操作包括窗口、逐条记录的转换操作,在处理事件时进行外部数据库查询等。DataStream API 支持 Java 和 Scala 语言,预先定义了例如map()、reduce()、aggregate() 等函数。你可以通过扩展实现预定义接口或使用 Java、Scala 的 lambda 表达式实现自定义的函数。

3、SQL & Table API

Flink 支持两种关系型的 API,Table API 和 SQL。这两个 API 都是批处理和流处理统一的 API,这意味着在无边界的实时数据流和有边界的历史记录数据流上,关系型 API 会以相同的语义执行查询,并产生相同的结果。Table API 和 SQL 借助了 Apache Calcite 来进行查询的解析,校验以及优化。它们可以与 DataStream 和 DataSet API 无缝集成,并支持用户自定义的标量函数,聚合函数以及表值函数。

4、库

Flink 具有数个适用于常见数据处理应用场景的扩展库。这些库通常嵌入在 API 中,且并不完全独立于其它 API。它们也因此可以受益于 API 的所有特性,并与其他库集成。

复杂事件处理(CEP):模式检测是事件流处理中的一个非常常见的用例。Flink 的 CEP 库提供了 API,使用户能够以例如正则表达式或状态机的方式指定事件模式。CEP 库与 Flink 的 DataStream API 集成,以便在 DataStream 上评估模式。CEP 库的应用包括网络入侵检测,业务流程监控和欺诈检测。

DataSet API:DataSet API 是 Flink 用于批处理应用程序的核心 API。DataSet API 所提供的基础算子包括map、reduce、(outer) join、co-group、iterate等。所有算子都有相应的算法和数据结构支持,对内存中的序列化数据进行操作。如果数据大小超过预留内存,则过量数据将存储到磁盘。Flink 的 DataSet API 的数据处理算法借鉴了传统数据库算法的实现,例如混合散列连接(hybrid hash-join)和外部归并排序(external merge-sort)。

Gelly: Gelly 是一个可扩展的图形处理和分析库。Gelly 是在 DataSet API 之上实现的,并与 DataSet API 集成。因此,它能够受益于其可扩展且健壮的操作符。Gelly 提供了内置算法,如 label propagation、triangle enumeration 和 page rank 算法,也提供了一个简化自定义图算法实现的 Graph API。

运维

1、7 * 24小时稳定运行

在分布式系统中,服务故障是常有的事,为了保证服务能够7*24小时稳定运行,像Flink这样的流处理器故障恢复机制是必须要有的。显然这就意味着,它(这类流处理器)不仅要能在服务出现故障时候能够重启服务,而且还要当故障发生时,保证能够持久化服务内部各个组件的当前状态,只有这样才能保证在故障恢复时候,服务能够继续正常运行,好像故障就没有发生过一样。

Flink通过几下多种机制维护应用可持续运行及其一致性:

检查点的一致性: Flink的故障恢复机制是通过建立分布式应用服务状态一致性检查点实现的,当有故障产生时,应用服务会重启后,再重新加载上一次成功备份的状态检查点信息。结合可重放的数据源,该特性可保证精确一次(exactly-once)的状态一致性。

高效的检查点: 如果一个应用要维护一个TB级的状态信息,对此应用的状态建立检查点服务的资源开销是很高的,为了减小因检查点服务对应用的延迟性(SLAs服务等级协议)的影响,Flink采用异步及增量的方式构建检查点服务。

端到端的精确一次: Flink 为某些特定的存储支持了事务型输出的功能,及时在发生故障的情况下,也能够保证精确一次的输出。

集成多种集群管理服务: Flink已与多种集群管理服务紧密集成,如 Hadoop YARN, Mesos, 以及 Kubernetes。当集群中某个流程任务失败后,一个新的流程服务会自动启动并替代它继续执行。

内置高可用服务: Flink内置了为解决单点故障问题的高可用性服务模块,此模块是基于Apache ZooKeeper 技术实现的,Apache ZooKeeper是一种可靠的、交互式的、分布式协调服务组件

2、Flink能够更方便地升级、迁移、暂停、恢复应用服务

驱动关键业务服务的流应用是经常需要维护的。比如需要修复系统漏洞,改进功能,或开发新功能。然而升级一个有状态的流应用并不是简单的事情,因为在我们为了升级一个改进后版本而简单停止当前流应用并重启时,我们还不能丢失掉当前流应用的所处于的状态信息。

而Flink的Savepoint 服务就是为解决升级服务过程中记录流应用状态信息及其相关难题而产生的一种唯一的、强大的组件。一个 Savepoint,就是一个应用服务状态的一致性快照,因此其与checkpoint组件的很相似,但是与checkpoint相比,Savepoint 需要手动触发启动,而且当流应用服务停止时,它并不会自动删除。Savepoint 常被应用于启动一个已含有状态的流服务,并初始化其(备份时)状态。Savepoint 有以下特点:

便于升级应用服务版本: Savepoint 常在应用版本升级时使用,当前应用的新版本更新升级时,可以根据上一个版本程序记录的 Savepoint 内的服务状态信息来重启服务。它也可能会使用更早的 Savepoint 还原点来重启服务,以便于修复由于有缺陷的程序版本导致的不正确的程序运行结果。

方便集群服务移植: 通过使用 Savepoint,流服务应用可以自由的在不同集群中迁移部署。

方便Flink版本升级: 通过使用 Savepoint,可以使应用服务在升级Flink时,更加安全便捷。

增加应用并行服务的扩展性: Savepoint 也常在增加或减少应用服务集群的并行度时使用。

便于A/B测试及假设分析场景对比结果: 通过把同一应用在使用不同版本的应用程序,基于同一个 Savepoint 还原点启动服务时,可以测试对比2个或多个版本程序的性能及服务质量。

暂停和恢复服务: 一个应用服务可以在新建一个 Savepoint 后再停止服务,以便于后面任何时间点再根据这个实时刷新的 Savepoint 还原点进行恢复服务。

归档服务: Savepoint 还提供还原点的归档服务,以便于用户能够指定时间点的 Savepoint 的服务数据进行重置应用服务的状态,进行恢复服务

3、监控和控制应用服务

如其它应用服务一样,持续运行的流应用服务也需要监控及集成到一些基础设施资源管理服务中,例如一个组件的监控服务及日志服务等。监控服务有助于预测问题并提前做出反应,日志服务提供日志记录能够帮助追踪、调查、分析故障发生的根本原因。最后,便捷易用的访问控制应用服务运行的接口也是Flink的一个重要的亮点特征。

Flink与许多常见的日志记录和监视服务集成得很好,并提供了一个REST API来控制应用服务和查询应用信息。具体表现如下:

Web UI方式: Flink提供了一个web UI来观察、监视和调试正在运行的应用服务。并且还可以执行或取消组件或任务的执行。

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

指标服务: Flink提供了一个复杂的度量系统来收集和报告系统和用户定义的度量指标信息。度量信息可以导出到多个报表组件服务,包括 JMX, Ganglia, Graphite, Prometheus, StatsD, Datadog, 和 Slf4j.

标准的WEB REST API接口服务: Flink提供多种REST API接口,有提交新应用程序、获取正在运行的应用程序的Savepoint服务信息、取消应用服务等接口。REST API还提供元数据信息和已采集的运行中或完成后的应用服务的指标信息。

[Flink]Flink实时框架介绍相关推荐

  1. 02_Flink vs storm vs SparkStreaming、Flink vs storm对比图、实时框架如何选择

    1.2.Flink vs storm vs SparkStreaming 1.2.1.对比图 1.2.2.Flink vs storm对比图 1.2.3.实时框架如何选择 需要关注流数据是否需要进行 ...

  2. Flink及Storm、Spark主流流框架比较-实时框架比较

    实时计算框架对比 - flink,storm,spark 三者的区别 我相信有不少的工程师都有着这样的处境,在学flink之前很好奇flink,storm,spark的区别是什么,为什么现在很多企业都 ...

  3. 日均百亿级日志处理:微博基于Flink的实时计算平台建设

    来自:DBAplus社群 作者介绍 吕永卫,微博广告资深数据开发工程师,实时数据项目组负责人. 黄鹏,微博广告实时数据开发工程师,负责法拉第实验平台数据开发.实时数据关联平台.实时算法特征数据计算.实 ...

  4. 大数据框架对比:Hadoop、Storm、Samza、Spark和Flink——flink支持SQL,待看

    简介 大数据是收集.整理.处理大容量数据集,并从中获得见解所需的非传统战略和技术的总称.虽然处理数据所需的计算能力或存储容量早已超过一台计算机的上限,但这种计算类型的普遍性.规模,以及价值在最近几年才 ...

  5. 腾讯基于 Flink 的实时流计算平台演进之路

    原文地址:https://www.infoq.cn/article/TjDeQDJQpKZ*NpG71pRW 大家好,我是来自腾讯大数据团队的杨华(vinoyang),很高兴能够参加这次北京的 QCo ...

  6. flink读取不到文件_日处理数据量超10亿:友信金服基于Flink构建实时用户画像系统的实践...

    简介: 友信金服公司推行全域的数据体系战略,通过打通和整合集团各个业务线数据,利用大数据.人工智能等技术构建统一的数据资产,如 ID-Mapping.用户标签等.友信金服用户画像项目正是以此为背景成立 ...

  7. flink 架构、概念介绍

    flink结合实时告警分享 flink是什么 批处理 是有界数据流处理的范例.在这种模式下,可以选择在计算结果输出之前输入整个数据集,这也就意味着你可以对整个数据集的数据进行排序.统计或汇总计算后再输 ...

  8. 基于Flink的实时日志分析系统实践

    前言 目前业界基于 Hadoop 技术栈的底层计算平台越发稳定成熟,计算能力不再成为主要瓶颈. 多样化的数据.复杂的业务分析需求.系统稳定性.数据可靠性, 这些软性要求, 逐渐成为日志分析系统面对的主 ...

  9. 【硬刚大数据】Flink在实时在实时计算平台和实时数仓中的企业级应用小结

    欢迎关注博客主页:https://blog.csdn.net/u013411339 欢迎点赞.收藏.留言 ,欢迎留言交流! 本文由[王知无]原创,首发于 CSDN博客! 本文首发CSDN论坛,未经过官 ...

最新文章

  1. 模块化以及插件化开发个人设计思路
  2. ElementUI中el-upload中怎样限制上传文件的格式
  3. 用户账号管理基本概念
  4. 了解一些常用的牛逼编译器(不限制编程语言, 不限制平台)
  5. c语言 指针_C语言野指针以及非法内存操作
  6. 线性线性混合效应模型及R语言实现
  7. 我为何从开发转测试,并坚持了16年?
  8. python电影数据分析报告_Python进行电影数据分析及可视化
  9. 2021年井冈山中学高考成绩查询入口,【高考成绩】2019年高考成绩揭晓,井冈山中学取得好成绩!...
  10. pycharm占用c盘
  11. pure seq2seq
  12. 头像 linux,头像制作大师下载-头像制作大师appv1.2.0-Linux公社
  13. 计算机网络-第1章 计算机网络和因特网-同步电大进度
  14. DPDK Rx flexible descriptor 在Intel E810 网卡中的使用
  15. php 微盟,微盟开放授权并获取ACCESS_TOKEN方法(新版)
  16. MySQL 查看表结构 显示表内容 使用语句区别
  17. python怎么做图表好看_如何制作有趣好看的数据可视化图表?
  18. 屏蔽网通域名纠错系统
  19. 搜狐网络评论系统–畅言!与多说、友言、灯鹭、新浪评论简单评测
  20. scrapy爬取王者荣耀皮肤

热门文章

  1. 调整Redmine的用户显示格式
  2. 查找(四)-------基于B树的查找和所谓的B树
  3. atitit.薄伽梵歌overview  attilax 读后感
  4. .NET 调用外部exe程序,出现已停止工作
  5. 跨应用程序域(AppDomain)的单例(Singleton)实现
  6. Android 布局
  7. iPhone NavigationBar和UIToolbar基础
  8. L2-010 排座位 (并查集)
  9. day31-python阶段性复习五
  10. 转载 webstrom识别 React语法