赞
踩
Apache Flink 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见的集群环境中运行,并能以内存速度和任意规模进行计算。
流式处理的特点是无界和实时的,不需要针对整个数据集进行处理,而是对系统传输的每个数据执行操作,因此流数据处理能更真实的反应我们的生活和工作方式;通常用在实时处理方面。
我们工作的目标是低延迟的、高吞吐的、高可用的实时应用。
数据报表、广告投放、业务流程处理
实时报警、热门事件新闻
实时数据结算、实时监测异常数据
将数据从业务数据库同步到数据仓库,再进行数据分析和查询。
实时订阅业务数据消息队列,然后通过数据清洗、多数据源join、流式数据与离线维度信息等的组合,将一些相同粒度的业务系统、维表中的维度属性全部关联到一起,增加数据易用性和复用性,得到最终的实时明细数据。这部分数据有两个分支,一部分直接落地到ADS,供实时明细查询使用,一部分再发送到消息队列中,供下层计算使用。
以数据主题+业务场景的方式创建公共汇总层,与离线数仓不同的是,这里汇总层分为轻度汇总层和高度汇总层,并同时产出,轻度汇总层写入ADS,用于前端产品复杂的OLAP查询场景,满足自助分析和实时报表数据需求;高度汇总层写入HBase,用于前端比较简单的KV查询场景,提升查询性能,比如实时续班大屏等。
Flink的功能强大,它的主要特性包括:流批一体化、精确的状态管理、事件时间支持以及精确的状态一次性保证等。Flink不仅仅可以在Yarn、Mesos、Kubernetes上面运行,同时也支持在裸机机器上运行。在启用高可用选项的情况下,并不存在单点失效问题。实践证明,在处理TB级别的数据时,Flink仍然能保持高吞吐、低延迟的特性。
事件驱动型应用是一类具有状态的应用,从一个或者多个事件流中提取数据,并根据到来的事件触发计算、更新状态或者进行其他计算。事件驱动型应用是从计算存储分离的传统应用基础上演变而来的。在传统的架构中,需要通过读写事务型数据库来完成。
但是,事件驱动型应用是基于状态化流处理来完成;而且数据和计算不会分离,应用只需要访问本地(内存或磁盘)即可获取数据。通过定期持久化的写入checkpoint来进行系统容错。下图描述了传统应用和事件驱动型应用架构的区别。
如下图所示,Flink同时支持流式及批量分析应用
Flink对流式数据分析和批量数据分析都提供了很好的支持。它内置了一个符合ANSI标准的SQL接口,能够将流、批查询的语义统一起来。同时,Flink还支持丰富的用户自定义函数,能够在SQL中执行自定义函数。Flink的DataStream API和DataSet API能够进行更底层的控制。而且,Flink的Gelly库为基于批量数据集的大规模高性能图分析提供了算法和构建模块支持。
抽取-转换-加载(ETL)是传统数据仓库进行数据转换和迁移的常用方法。ETL通常会周期性的将数据从事务型数据库或者原始日志同步到分析型数据仓库中。
数据管道应用和ETL作业的用途相似,都可以转换、加工数据。并将其从某个存储系统移动到另一个。但数据管道是以持续流模式运行,而非周期性出发。数据管道支持从一个不断生成数据的源头读取记录,并且低延迟的将数据结果加载到终点。
下图描述了周期性ETL作业和持续数据管道的差异。
和周期性ETL作业相比,持续数据管道可以明显降低数据移动到目标端的延迟。
很多常见的数据转换和增强操作可以利用Flink的SQL接口(或者Table API)及用户自定义函数解决。如果数据管道有更高级的需求,可以选择更通用的DataStream API来实现。Flink为多种数据存储系统(例如:Kafka、Kinesis、Elasticsearch、JDBC数据库系统等)内置了连接器。它还具有用于文件系统的连续源,这些源监视目录和接收器以时间存储方式写入文件。
任何数据都可以形成一种事件流。银行卡(信用卡)交易、传感器测量、机器日志、网站或移动应用程序上的用户交易记录等等,所有这些数据都能形成一种流。
数据可以被作为无界和有界流来处理。
Flink擅长处理无界和有界数据集 精确的时间控制和状态化使得Flink的运行时(runtime)能够运行任何处理无界流的应用。有界流则由一些专为固定大小数据集特殊设计的算法和数据结构进行内部处理。
Flink是一个分布式系统,它需要计算资源来执行应用程序。Flink集成了所有常见的集群资源管理器,例如Hadoop Yarn、Apache Mesos和Kubernetes,同时也可以作为独立集群运行。
Flink通常把应用程序并行化数千个任务,这些任务分布在集群中并发执行。因此应用程序能够充分利用无尽的CPU、内存、磁盘和网络IO。Flink能够很方便的对应用程序的状态进行维护。其异步和增量的检查点算法仅仅会对数据延迟产生极小的影响。而且能够保证精确一次状态的一致性。
有状态的 Flink 程序针对本地状态访问进行了优化。任务的状态始终保留在内存中,如果状态大小超过可用内存,则会保存在能高效访问的磁盘数据结构中。Flink 通过定期和异步地对本地状态进行持久化存储来保证故障场景下精确一次的状态一致性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。