Flink入门介绍

《 Flink 入门介绍》

一、前言

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

(一)数据的时效性

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

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

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

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

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

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

(四)实时即未来

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

二、Flink 概述

(一)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 支持等方面表现出色,流式计算性能和可靠性更高。

(二)Flink 发展史

  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 官方介绍

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

(四)编程语言

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

(五)FLink 外传

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

(六)Flink 中的批和流

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

(七)性能比较

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

(八)Flink 的应用场景

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

  1. 电商和市场营销:实现实时数据报表、广告投放、实时推荐等功能,助力精准营销与业务决策。
  2. 物联网(IOT):用于传感器实时数据采集与显示、实时报警,在交通运输业等领域发挥重要作用,保障设备运行安全与数据监控及时。
  3. 物流配送和服务业:可实时更新订单状态、推送通知信息,提升服务质量与客户体验。
  4. 银行和金融业:支持实时结算与通知推送,实时检测异常行为,保障金融交易安全与高效运作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/920882.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot3+Vue3开发图书馆管理系统

1 项目介绍 图书馆管理系统,管理图书、用户、借书、还书、实时监测归还是否逾期,逾期未归还会生成违规记录。违规状态不可借阅图书。需缴纳罚金,消除违规记录。可动态设置图书最多累计借阅数量上限和最长借阅天数上限,当用户满足…

Figure 02迎重大升级!!人形机器人独角兽[Figure AI]商业化加速

11月19日知名人形机器人独角兽公司【Figure AI】发布公司汽车巨头【宝马】最新合作进展,旗下人形机器人Figure 02在生产线上的性能得到了显著提升,机器人组成自主舰队,依托端到端技术,速度提高了400%,执行任务成功率提…

Oracle之Rman非归档模式下的完全恢复

引言 首先Oracle必须处在非归档模式下才能模拟各种情况,Oracle处在非归档模式,做数据库脱机备份,并且rman的参数使用快闪恢复区作为备份文件的存储目录,配置了控制文件的自动备份。 联机全备 示例1:控制文件、数据文件以及重做日志文件丢失的恢复 数据文件以及重做日志…

Android Google登录接入

官方文献: 1、前期准备: https://developers.google.cn/identity/sign-in/android/legacy-start-integrating?hlzh-cnhttps://developers.google.cn/identity/sign-in/android/legacy-start-integrating?hlzh-cn 2、具体开发: 新版 Googl…

Java 同步锁性能的最佳实践:从理论到实践的完整指南

目录 一、同步锁性能分析 (一)性能验证说明 1. 使用同步锁的代码示例 2. 不使用同步锁的代码示例 3. 结果与讨论 (二)案例初步优化分析说明 1. 使用AtomicInteger原子类尝试优化分析 2. 对AtomicInteger原子类进一步优化 …

Docker+Nginx | Docker(Nginx) + Docker(fastapi)反向代理

在DockerHub搜 nginx,第一个就是官方镜像库,这里使用1.27.2版本演示 1.下载镜像 docker pull nginx:1.27.2 2.测试运行 docker run --name nginx -p 9090:80 -d nginx:1.27.2 这里绑定了宿主机的9090端口,只要访问宿主机的9090端口&#…

C#编写的日志记录组件 - 开源研究系列文章

以前编写过一个日志记录组件的博文,这次发布一个修改过的完善版本。 1、 项目目录; 2、 源码介绍; 1) 实现; 2) 使用; 后面的参数为级别设置,只有大于这个级别的才进行日志记录,限制了日志记录的…

win10+vs2019+cmake+opencv4.10+opencv_contrib编译记录

win10vs2019cmakeopencv4.10opencv_contrib编译记录 第一章 环境配置 本机环境已经安装好vs2019和cmake。 第二章 下载opencv相关 1.Opencv4.10下载 下载链接:opencv 下载时选择"Sources" 2.opencv_contrib 下载链接:opencv_contrib 第三…

前端:HTML (学习笔记)【1】

一,网络编程的三大基石 1,URL (1)url —— 统一资源定位符: 网址——整个互联网中可以唯一且准确的确定一个资源的位置。 【项目外】 网址——https://www.baidu.com/ …

2024年亚太地区数学建模大赛A题-复杂场景下水下图像增强技术的研究

复杂场景下水下图像增强技术的研究 对于海洋勘探来说,清晰、高质量的水下图像是深海地形测量和海底资源调查的关键。然而,在复杂的水下环境中,由于光在水中传播过程中的吸收、散射等现象,导致图像质量下降,导致模糊、…

基于SpringBoot的“广场舞团系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“广场舞团系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统首页界面图 社团界面图 社团活…

视频流媒体播放器EasyPlayer.js无插件直播流媒体音视频播放器Android端webview全屏调用无效问题

流媒体播放器的核心技术与发展趋势正在不断推动着行业的变革。未来,随着技术的不断进步和应用场景的不断拓展,流媒体播放器将为用户带来更加便捷、高效、个性化的观看体验。同时,流媒体播放器也会成为数字娱乐产业的重要组成部分,…

【Python · PyTorch】卷积神经网络 CNN(LeNet-5网络)

【Python PyTorch】卷积神经网络 CNN(LeNet-5网络) 1. LeNet-5网络※ LeNet-5网络结构 2. 读取数据2.1 Torchvision读取数据2.2 MNIST & FashionMNIST 下载解包读取数据 2. Mnist※ 训练 LeNet5 预测分类 3. EMnist※ 训练 LeNet5 预测分类 4. Fash…

Live2D嵌入前端页面

废话不多说,直接看效果,给页面中嵌入的一个动态的二次元人物,美化页面,实际效果自行查看。 教程开始 一. 把项目拉取到本地 项目地址 自行下载到本地,下载方式自行选择。 二.把项目文件夹放到前端页面目录内 三.把下…

openlayer 将 GeoJSON 格式的 geometry 转换为 feature

openlayer 将 GeoJSON 格式的 geometry 转换为 feature geometry格式如图: 代码: /*** 将 GeoJSON 格式的 geometry 转换为 feature* param geometry* returns*/geoJsonToWkt(geometry) {const { coordinates, type } geometry;let olGeometry;swit…

web应用安全和信息泄露预防

文章目录 1:spring actuator导致的信息泄露1.1、Endpoint配置启用检测1.2、信息泄露复现1.3、防御 2:服务端口的合理使用3:弱口令(密码)管理4:服务端攻击4.1、短信业务,文件上传等资源型接口1、…

基于LSTM的新闻中文文本分类——基于textCNN与textRNN

构建词语字典 def build_vocab(file_path, tokenizer, max_size, min_freq):# 定义词汇表字典:使用 vocab_dic {} 初始化一个空字典,用于存储每个词及其出现频率vocab_dic {}with open(file_path, r, encodingUTF-8) as f:for line in tqdm(f):lin l…

MySQL 的 Change Buffer 是什么?它有什么作用?

MySQL 的 Change Buffer 是什么?它有什么作用? MySQL 是目前广泛使用的开源数据库管理系统,其中的 InnoDB 存储引擎凭借其高性能、高可靠性以及强大的事务支持,成为了默认的存储引擎。在 InnoDB 的众多优化机制中,Cha…

Spark 之 Aggregate

Aggregate 参考链接: https://github.com/PZXWHU/SparkSQL-Kernel-Profiling 完整的聚合查询的关键字包括 group by、 cube、 grouping sets 和 rollup 4 种 。 分组语句 group by 后面可以是一个或多个分组表达式( groupingExpressions )…

C#高级:Winform中的自定义窗体输入

目录 一、多样式输入(无封装) 1.代码 2.效果 二、单输入框封装 1.使用 2.封装 3.效果 三、组合框批量输入封装 1.使用 2.封装 3.效果 一、多样式输入(无封装) 1.代码 private async void button1_Click(object send…