apache flink是什么

    flink是一套分布式数据处理框架,解决有界和无界的数据流状态计算,flink被设计运行在常见的集群环境,高速处理和大规模计算。
    介绍一下flink架构
    处理无边界和有边界的数据
    1.无边界数据流
        有数据开始,没有数据结束,数据会源源不断的产生,无界数据流必须持续的处理,不可能等到所有数据都到达了再处理,因为没有结束的数据。
    2.有界数据流
        数据有开始有结束,有界数据流能处理在执行计算前能处理所有获取到的数据。数据流不需要有序,因为无序的数据流将再处理前进行排序和处理。有界数据流处理就是批处理。
    flink擅长处理有界和无界的数据集。精确的控制时间和状态使得flink运行再各种无界的数据流中。
    
    在任何地方部署应用程序
    flink集成通用的资源管理工具比如YARN,mesos kubernetes,也能部署在stand-alone集群环境。
    
    在任何集群规模上运行应用程序
    Flink设计用于在任何规模上运行有状态流应用程序。应用程序可能被并行化为数千个任务,这些任务分布在集群中并同时执行。因此,一个应用程序可以利用几乎无限数量的cpu、主内存、磁盘和网络IO。此外,Flink很容易维护非常大的应用程序状态。它的异步和增量检查点算法在保证一次状态一致性的同时,确保对处理延迟的影响最小。
    
    利用内存性能
    有状态Flink应用程序针对本地状态访问进行了优化。任务状态总是在内存中维护,如果状态大小超过可用内存,则在访问高效的磁盘数据结构中维护。因此,任务通过访问本地(通常在内存中)状态执行所有计算,从而产生非常低的处理延迟。通过定期和异步地将本地状态检查点指向持久存储,Flink确保了在发生故障时的一次状态一致性。
    
    下面,我们将探讨由Flink提供支持的最常见的应用程序类型,并给出实际示例的指针。
    1.事件驱动的应用程序
    2.数据分析应用程序
    3.数据管道应用程序
    
    什么是事件驱动的应用程序?
    事件驱动的应用程序是一个有状态的应用程序,它从一个或多个事件流中摄取事件,并通过触发计算、状态更新或外部操作来响应传入的事件。
    事件驱动的应用程序是传统应用程序设计的演化,具有独立的计算层和数据存储层。在这种体系结构中,应用程序从远程事务数据库读取数据并将数据持久存储。
    相反,事件驱动的应用程序基于有状态流处理应用程序。在这种设计中,数据和计算是共存的,从而产生本地(内存或磁盘)数据访问。通过定期将检查点写入远程持久存储,可以实现容错。下图描述了传统应用程序体系结构和事件驱动应用程序之间的区别。
    
    典型的事件驱动应用程序应用场景?
    欺诈检测
    异常检测
    基于规则的提醒
    业务流程监控
    Web应用程序(社交网络)
    
    数据分析应用程序
    什么是数据分析应用程序?
    分析工作从原始数据中提取信息和洞察力。传统上,分析是作为对记录事件的有界数据集的批处理查询或应用程序执行的。为了将最新的数据合并到分析结果中,必须将其添加到分析的数据集中,然后重新运行查询或应用程序。结果被写入存储系统或作为报告发出。
    使用复杂的流处理引擎,还可以实时执行分析。流查询或应用程序不是读取有限的数据集,而是吸收实时事件流,并在使用事件时不断生成和更新结果。结果要么写入外部数据库,要么作为内部状态维护。Dashboard应用程序可以从外部数据库读取最新结果,也可以直接查询应用程序的内部状态。
    Apache Flink支持流以及批处理分析应用程序,如下图所示。
    
    与批处理分析相比,连续流分析的优势并不局限于由于消除了周期性导入和查询执行,从事件到洞察的延迟要低得多。与批处理查询不同,流查询不需要处理输入数据中的人为边界,这些边界是由周期性导入和输入的有界性造成的。
    另一个方面是更简单的应用程序体系结构。批处理分析管道由几个独立组件组成,用于定期调度数据摄入和查询执行。可靠地运行这样的管道并不简单,因为一个组件的故障会影响管道的以下步骤。相比之下,流分析应用程序运行在复杂的流处理器(如Flink)上,它包含从数据摄取到连续结果计算的所有步骤。因此,它可以依靠发动机的故障恢复机制。
    Flink如何支持数据分析应用程序?
    Flink为连续流和批处理分析提供了非常好的支持。具体来说,它具有一个符合ansi的SQL接口,具有用于批处理和流查询的统一语义。无论SQL查询是在记录事件的静态数据集上运行,还是在实时事件流上运行,它们都计算相同的结果。对用户定义函数的丰富支持确保可以在SQL查询中执行定制代码。如果需要更多的定制逻辑,Flink的DataStream API或DataSet API提供了更多的底层控制。此外,Flink的Gelly库为批量数据集的大规模和高性能图分析提供了算法和构建块。
    
    典型的数据分析应用程序场景?
    电信网络质量监控
    产品更新分析及移动应用实验评估
    消费者技术中实时数据的特别分析
    大规模图分析
    
    数据管道应用程序
    提取-转换-加载(Extract-transform-load, ETL)是在存储系统之间转换和移动数据的常用方法。ETL作业通常定期触发,以便将数据从事务性数据库系统复制到分析数据库或数据仓库。
    数据管道的作用类似于ETL作业。它们转换和丰富数据,并能将数据从一个存储系统移动到另一个存储系统。然而,它们以连续流模式运行,而不是周期性地触发。因此,它们能够从不断产生数据的源读取记录,并以较低的延迟将其移动到目标。例如,数据管道可以监视文件系统目录中的新文件,并将其数据写入事件日志。另一个应用程序可能将事件流物化到数据库,或者增量地构建和细化搜索索引。
    下图描述了周期性ETL作业和连续数据管道之间的区别。
    
    典型的数据管道应用程序的场景?
    电子商务中的实时搜索索引构建
    电子商务中的持续ETL

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值