Flink入门介绍

一、前言

在当今大数据领域,流式计算扮演着至关重要的角色。它与传统的批量计算有着明显的区别,并在众多场景中展现出独特的优势。

(一)数据的时效性

在日常工作中,数据处理方式多样。若处理年、月级别的数据进行统计分析或个性化推荐,数据时效性稍缓尚可。然而,对于天、小时甚至更小粒度的数据处理,如网站实时监控(双 11 大屏显示、12306)、异常日志监控(语雀)等场景,传统的先收集数据存储于表,再取出分析的方式已无法满足高时效性需求。这些场景要求工作人员能立即响应,因此对数据时效性要求极高。

(二)流式计算和批量计算

传统的批量计算流程为统一收集数据,存储到数据库(DB),然后对数据进行批量处理。而流式计算则是对持续流动的数据流进行实时处理,计算完后数据通常被丢弃。批量计算维护一张表并实施各种计算逻辑,而流式计算需先定义好计算逻辑并提交到流式计算系统,且在整个运行期间不可更改。在计算结果方面,批量计算对全部数据计算后传输结果,流式计算则是每次小批量计算后结果即可实时展现。

从技术框架来看,Batch Analytics 如 Map Reduce、Hive、Spark Batch 等主要用于传统的离线作业分析、处理与报表生成;Streaming Analytics 则借助 Storm、Flink 等流式分析引擎进行实时数据处理,常用于实时大屏、实时报表等场景(Spark Struct Streaming 为准实时)。

(三)流式计算流程和特性

  1. 流程
    • 提交流计算作业。
    • 等待流式数据触发流计算作业。
    • 计算结果持续不断对外写出。
  2. 特性
    • 实时,低延迟:能快速响应数据变化,及时给出处理结果。
    • 无界:数据源源不断输入,无终止状态。
    • 连续:计算持续进行,处理后的数据随即被丢弃,专注于实时处理新流入的数据。

(四)实时即未来

身处信息革命浪潮之中,5G、物联网、智慧城市、工业 4.0、新基建等新事物不断涌现。大数据领域的数据产生速度更快、数据量更大、来源更多样,数据价值挖掘愈发受重视。随着海量数据和多种业务实时处理需求的激增,传统批处理方式和早期流式处理框架在延迟性、吞吐量、容错能力和使用便捷性等方面难以满足业务要求。而 Flink 凭借其独特的天然流式计算特性和先进架构设计,有效改善了之前流式处理框架存在的问题,成为大数据处理领域的重要力量。

近年来大数据蓬勃发展,催生了多个热门开源社区。Hadoop、Storm、Spark 等各有其专注的应用场景。Spark 开启内存计算先河并推动其发展,一定程度上掩盖了其他分布式计算系统。Flink 便是在这样的环境中默默发展。在国外部分社区,大数据计算引擎被分为 4 代(虽存在争议):

  1. 第 1 代------Hadoop MapReduce:将计算分为 Map 和 Reduce 两个阶段,上层应用需拆分算法并串联多个 Job 来完成完整算法。
  2. 第 2 代------DAG 框架(Tez) + MapReduce:为解决第一代弊端,支持 DAG 框架的第二代计算引擎诞生,如 Tez 和 Oozie,多应用于批处理任务。
  3. 第 3 代------Spark:以 Job 内部 DAG 支持(不跨越 Job)和强调实时计算为特点,也能较好运行批处理 Job。
  4. 第 4 代------Flink:着重对流计算的支持和更高的实时性,同时也支持 Batch 任务和 DAG 运算,在批处理、流处理、SQL 高层 API 支持等方面表现出色,流式计算性能和可靠性更高。
  1. 起源与捐赠:Flink 起源于 Stratosphere 项目,该项目于 2010 - 2014 年由柏林等地大学联合研究,2014 年 4 月捐赠给 Apache 软件基金会。
  2. 成为顶级项目:2014 年 12 月成为 Apache 软件基金会顶级项目,其前身自 2008 年起已是柏林理工大学研究项目,原名 StratoSphere,后更名为 Flink,由 Java 语言编写。
  3. 重要版本发布
    • 2014 - 11 - 04,Flink 0.7.0 发布,引入重要的 Streaming API。
    • 2016 - 03 - 08,Flink 1.0.0 支持 Scala。
  4. 商业收购:2019 - 01 - 08,阿里巴巴以 9000 万欧元收购 Flink 母公司 Data Artisans,推动 Flink 进一步发展。其 logo 为一只具有 Apache 风格的松鼠,在德语中"Flink"表示快速和灵巧。

Flink 官方网站为 https://flink.apache.org/zh/,主页展示其理念为"Apache Flink 是为分布式、高性能、随时可用以及准确的流处理应用程序打造的开源流处理框架"。它是一款分布式计算引擎,既能用于流处理,也能用于批处理。

(四)编程语言

Flink 官方提供 Java、Scala、Python 语言接口开发应用程序,但其源码由 Java 编写。被阿里收购后,Java 更是未来主要编程语言,GitHub 上多数 Flink 项目也以 Java 编写,因此本课程以 Java 为主学习 Flink。

在典型大数据业务场景中,常采用批处理技术处理全量数据,流式计算处理实时增量数据。但用户批处理和流处理的计算引擎不同,需编写两套代码,带来额外负担和成本。阿里巴巴商品数据处理面临增量和全量业务流程问题,由此产生对统一大数据引擎技术的需求,这便是阿里选择 Flink 的背景与初衷。2015 年阿里开始使用 Flink 并持续贡献社区(内部基于 Flink 开发了 Blink),收购后 Flink 迎来新发展机遇。

批处理具有有界、持久、大量的特点,适合需访问全部记录的计算工作,常用于离线统计。流处理具有无界、实时的特性,对通过系统传输的每个数据项操作,多用于实时统计。在 Flink 中,一切皆由流组成,有界数据集被视为无界数据流的特例,离线数据是有界限的流,实时数据是无界限的流,即有界流和无界流。无界流只有开始无结束,需连续处理且数据注入有顺序要求以保证处理结果完整;有界流有明确起止定义,可在数据全部注入后处理,注入顺序非必需,其处理也可称为批处理。

(七)性能比较

Spark 和 Flink 均可运行在 Hadoop YARN 上,性能表现为 Flink > Spark > Hadoop(MR),尤其在迭代次数(数据量)较多时,Flink 性能优势更明显。这主要得益于 Flink 支持增量迭代并具备自动优化迭代功能。

众多行业的公司都在使用 Flink,如:

  1. 电商和市场营销:实现实时数据报表、广告投放、实时推荐等功能,助力精准营销与业务决策。
  2. 物联网(IOT):用于传感器实时数据采集与显示、实时报警,在交通运输业等领域发挥重要作用,保障设备运行安全与数据监控及时。
  3. 物流配送和服务业:可实时更新订单状态、推送通知信息,提升服务质量与客户体验。
  4. 银行和金融业:支持实时结算与通知推送,实时检测异常行为,保障金融交易安全与高效运作。
相关推荐
lilye6618 分钟前
程序化广告行业(39/89):广告投放的数据分析与优化秘籍
大数据·人工智能·数据分析
中科岩创2 小时前
某地老旧房屋自动化监测项目
大数据·物联网·自动化
Florian3 小时前
Graph4Stream:基于图的流计算加速
flink·流计算·图计算·geaflow
viperrrrrrrrrr73 小时前
大数据学习(95)-谓词下推
大数据·sql·学习
汤姆yu4 小时前
基于python大数据的旅游可视化及推荐系统
大数据·旅游·可视化·算法推荐
zhangjin12224 小时前
kettle从入门到精通 第九十四课 ETL之kettle MySQL Bulk Loader大批量高性能数据写入
大数据·数据仓库·mysql·etl·kettle实战·kettlel批量插入·kettle mysql
哈哈真棒5 小时前
hadoop 集群的常用命令
大数据
阿里云大数据AI技术5 小时前
百观科技基于阿里云 EMR 的数据湖实践分享
大数据·数据库
泛微OA办公系统5 小时前
上市电子制造企业如何实现合规的质量文件管理?
大数据·制造
镜舟科技6 小时前
迈向云原生:理想汽车 OLAP 引擎变革之路
大数据·数据库·云原生