介绍

介绍 - 图1

是什么?

Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。

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

  • 无界流有一个开始但没有定义的结束。它们不会在生成时终止并提供数据。必须持续处理无界流,即必须在摄取事件后立即处理事件。无法等待所有输入数据到达,因为输入是无界的,并且在任何时间点都不会完成。处理无界数据通常要求以特定顺序(例如事件发生的顺序)摄取事件,以便能够推断结果完整性。
  • 有界流具有定义的开始和结束。可以在执行任何计算之前通过摄取所有数据来处理有界流。处理有界流不需要有序摄取,因为可以始终对有界数据集进行排序。有界流的处理也称为批处理。

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

应用特色

Flink设计为在所有常见的集群环境中运行,以内存速度任何规模执行计算出名

部署应用程序在任何地方

  1. Apache Flink是一个分布式系统,需要计算资源来执行应用程序。Flink集成了所有常见的集群资源管理器,如Hadoop YARNApache MesosKubernetes,但也可以设置为作为独立集群运行 Flink被设计成能够很好地工作于前面列出的每个资源管理器。这是通过特定于资源管理器的部署模式实现的,这种部署模式允许Flink以其惯用的方式与每个资源管理器交互 在部署Flink应用程序时,Flink根据应用程序的配置并行性自动识别所需的资源,并从资源管理器请求它们。如果发生故障,Flink将通过请求新的资源来替换失败的容器。提交或控制应用程序的所有通信都是通过REST调用进行的。这简化了Flink在许多环境中的集成。

以任何规模运行应用程序
Flink设计用于在任何规模上运行有状态流应用程序。应用程序被并行化成数千个任务,这些任务分布在一个集群中并发执行。因此,应用程序实际上可以利用无限数量的cpu、主内存、磁盘和网络IO。此外,Flink很容易保持非常大的应用状态。它的异步和增量检查点算法确保了对处理延迟的最小影响,同时保证了精确的一次状态一致性

利用内存中的性能
有状态Flink应用程序针对本地状态访问进行了优化。任务状态总是在内存中维护,如果状态大小超过可用内存,则在具有访问效率的磁盘数据结构中维护。因此,任务通过访问本地(通常是在内存中)状态来执行所有计算,从而产生非常低的处理延迟。Flink通过定期和异步检查本地状态到持久存储,保证了在发生故障时的精确一次状态一致性

1 数据计算的能力的4种类型

介绍 - 图2

(1) 批计算

主要用于批量数据的高延时处理场景,如离线数仓的加工,大规模数据的清洗和挖掘,目前大多数利用MapReduce, Hive,Spark 等计算框架进行出合理,其特点是数据吞吐量大,延时高,适合人机交互少的场景。

(2) 流计算

也叫实时计算,对于数据的加工处理和应用有较强的时效性要求。常用于监控告警场景 、例如实时分析网络事件 、当有异常事件发生能够及时接入处理。例如阿里巴巴 “双11” 的可视化大屏上的数据展现是根据浏览,交易数据经过实时计算后展示在可视化大屏上的一种应用。这类场景目前应用较多的计算框架有Flink , SparkStreaning , 和storm等。

(3) 在线查询

主要用于数据结果的在线查询,条件过滤和筛选等。如数据检索,条件过滤等,根据不同场景也会有多种选择 、如营销场景对延时要求高的 、一般会采集缓存型的存储计算 、如Redis,对响应延时要求正常的,可以选择Hbae和MYSQL等;需要进行条件过滤,检索的,可以选择Elasticsearch等。企业一般对在线查询的需求比较旺盛,因此可能会有多套在线计算能力提供服务。

(4) 即席查询

主要用户分析型场景和经验统计.。一般而言,企业80% 的数据处理需求是在线查询和即席分析。针对不同的维度分析 、由多种方式可以提供 、提前固定计算的维度 、根据需求任意维度的交叉分析(ad-hoc) 等都是常见的场景。 目前也有很多相应的产品,框架来支撑这方面的应用,如Kylin、Impala 、 ClinckHouse 、Hawk等。
简单来说 指用户通过手写SQL来完成一些临时的数据分析需求。这类需求的SQL形式多变、逻辑复杂,对响应时间没有严格的要求。

批计算 vs 流计算 vs 在线查询 vs 即席分析

计算能力 数据来源 批处理处理方式 底层框架 时延性
批计算 历史已存在数据 批处理 MapReduce
Spark
要求不高
流计算 源源不断的流式数据 微批处理 & 逐条处理 Storm
Flink
Spark Streaming
毫秒/秒级延迟
在线查询 历史已存在的数据 逐条处理/检索过滤 Elasticsearch
Redis
毫秒
即席分析 历史与存在的数据 批处理/聚合 Impala
Kylin
ClickHouse
AnalyticDB
毫秒/秒级级

2.流计算

批计算已经能满足多数大数据计算场景,然后要更快速,高效获取数据中的价值,批计算已经无法满足需求。此时,一些优秀的处理框架,如Storm、Flink 、Spark Streaming 等逐渐发展起来,被广泛使用。

  • 流计算的常见应用场景如下:
    • 流式ETL : 集成计算现有的 诸多数据通道和SQL灵活的加工能力,对流式数据进行实时清洗、归并,结构化处理。同时,对离线数据进行有效的补充和优化,为数据的实时传输提供可靠计算通道。
    • 流式报表: 实时采集 、加工流式数据,实时监控和展现业务和客户的各位指标,让数据运营实时化。
    • 监控预警: 对系统和用户的行为进行实时检测和分析,实时监测和发现各种危险行为。
    • 在线系统: 实时计算各类数据指标,并利用实时结果及时调整在线系统的相关策略,在内容投放 、无线智能推送等领域有大量的应用。

2.1 市面上那些场景需要处理流数据

  • 电商和市场营销 例如京东淘宝商品边浏览边实时推荐
  • 查看 数据报表 业务流程需要实时查看
  • 电信基站调配 出省立马发短信等等