@[toc]
Apache Flink 入门,了解 Apache Flink
1、如何通俗易懂的解释 Flink
Flink 主要在协议层面做了各类协议的转换,降低了各数据之间的转换成本,另外 Flink 基于内存保持状态,性能很高
Flink 支持集群和分布式部署,可以支持海量的吞吐,达到 TB 级,相比于传统的数据处理方式,Flink 可以把数据直接转换成表格
比如一个 JSON List ,Flink 可以直接把数据转变成 Table 然后通过 Flink SQL 进行数据处理操作
Flink 可以对接多个数据源,然后通过 Flink SQL 过滤数据然后转发出去
2、Flink
Apache Flink 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。
Apache Flink 功能强大,支持开发和运行多种不同种类的应用程序。它的主要特性包括:批流一体化、精密的状态管理、事件时间支持以及精确一次的状态一致性保障等。
Apache Flink 不仅可以运行在包括 YARN、 Mesos、Kubernetes 在内的多种资源管理框架上,还支持在裸机集群上独立部署。在启用高可用选项的情况下,它不存在单点失效问题。
事实证明,Flink 已经可以扩展到数千核心,其状态可以达到 TB 级别,且仍能保持高吞吐、低延迟的特性。世界各地有很多要求严苛的流处理应用都运行在 Flink 之上
3、应用场景
应用场景 Flink 擅长处理无界和有界数据集 精确的时间控制和状态化使得Flink的运行时(runtime)能够运行任何处理无界流的应用。有界流则由一些专为固定大小数据集特殊
设计的算法和数据结构进行内部处理,产生了出色的性能
1、实时智能推荐
利用Flink流计算帮助用户构建更加实时的智能推荐系统,对用户行为指标进行实时计算,对模型进行实时更新,对用户指标进行实时预测,并将预测的信息推送给Web/App端,
帮助用户获取想要的商品信息,另一方面也帮助企业提高销售额,创造更大的商业价值
2、复杂事件处理
例如工业领域的复杂事件处理,这些业务类型的数据量非常大,且对数据的时效性要求较高。我们可以使用Flink提供的CEP(复杂事件处理)进行事件模式的抽取,同时应用
Flink的SQL进行事件数据的转换,在流式系统中构建实时规则引擎
3、实时欺诈检测
在金融领域的业务中,常常出现各种类型的欺诈行为。运用Flink流式计算技术能够在毫秒内就完成对欺诈判断行为指标的计算,然后实时对交易流水进行规则判断或者模型预测,
这样一旦检测出交易中存在欺诈嫌疑,则直接对交易进行实时拦截,避免因为处理不及时而导致的经济损失
4、实时数仓与 ETL
结合离线数仓,通过利用流计算等诸多优势和SQL灵活的加工能力,对流式数据进行实时清洗、归并、结构化处理,为离线数仓进行补充和优化。另一方面结合实时数据ETL处理
能力,利用有状态流式计算技术,可以尽可能降低企业由于在离线数据计算过程中调度逻辑的复杂度,高效快速地处理企业需要的统计结果,帮助企业更好的应用实时数据所分析出来的结果
5、流数据分析
实时计算各类数据指标,并利用实时结果及时调整在线系统相关策略,在各类投放、无线智能推送领域有大量的应用。流式计算技术将数据分析场景实时化,帮助企业做到实时化分析
Web应用或者App应用的各种指标。
6、实时报表分析
实时报表分析说近年来很多公司采用的报表统计方案之一,其中最主要的应用便是实时大屏展示。利用流式计算实时得出的结果直接被推送到前段应用,实时显示出重要的指标变换,
最典型的案例就是淘宝的双十一实时战报
4、Apache Flink 特性
Apache Flink 特性
1、分布式
2、支持集群
3、使用内存性能 (任务状态驻留内存)
4、分层 API
5、同时支持高吞吐、低延迟、高性能
6、同时支持事件时间和处理时间语义
7、支持有状态计算,并提供精确一次的状态一致性保障
8、基于轻量级分布式快照实现的容错机制
9、保证了高可用,动态扩展,实现7 * 24小时全天候运行
10、支持高度灵活的窗口操作
5、Apache Flink 的分层 API
ProcessFunction
可以处理一或两条输入数据流中的单个事件或者归入一个特定窗口内的多个事件。它提供了对于时间和状态的细粒度控制。开发者可以在其中任意地修改状态,
也能够注册定时器用以在未来的某一时刻触发回调函数。因此,你可以利用ProcessFunction实现许多有状态的事件驱动应用所需要的基于单个事件的复杂业务逻辑。
DataStream API
为许多通用的流处理操作提供了处理原语。这些操作包括窗口、逐条记录的转换操作,在处理事件时进行外部数据库查询等。DataStream API 支持 Java 和 Scala 语言,
预先定义了例如map()、reduce()、aggregate() 等函数。你可以通过扩展实现预定义接口或使用 Java、Scala 的 lambda 表达式实现自定义的函数。
SQL & Table API
Flink 支持两种关系型的 API,Table API 和 SQL。这两个 API 都是批处理和流处理统一的 API,这意味着在无边界的实时数据流和有边界的历史记录数据流上,
关系型 API 会以相同的语义执行查询,并产生相同的结果。Table API和SQL借助了 Apache Calcite来进行查询的解析,校验以及优化。它们可以与 DataStream
和 DataSet API无缝集成,并支持用户自定义的标量函数,聚合函数以及表值函数。Flink 的关系型 API 旨在简化数据分析、数据流水线和 ETL 应用的定义