当前位置: 首页 > news >正文

Flink的介绍及应用

一、概述

Flink 是一种开源的分布式计算框架,专为处理大规模数据流而设计。它能够在低延迟和高吞吐的场景下高效地处理实时和批量数据。Flink 的全称是 Apache Flink,它是 Apache 软件基金会的顶级项目之一。

二、初识Flink

  • 2010年,Flink 最早由 Data Artisans(后来的阿里巴巴 Flink 团队)开发。Flink 的前身是 Stratosphere 项目,这个项目在德国柏林的 Humboldt University(洪堡大学)由 Costin Raiciu 和 Kostas Tzoumas 等人发起。Stratosphere 项目是为了应对大规模数据处理,特别是在流式数据和批量数据的统一处理方面的挑战。
  • 2014年,Stratosphere 进入 Apache 孵化器并更名为 Flink,开始专注于流处理。
  • 2015年,Flink 从孵化器毕业,成为 Apache 顶级项目。
  • 2016年,发布首个稳定版本 1.0,标志着其正式进入生产可用阶段。

三、Flink的核心特点

  • 统一的流处理和批处理架构Flink 的核心是一个流处理引擎,所有的数据都被视为数据流。实时流处理:Flink 能够实时处理无限的数据流(如事件日志、传感器数据)。批处理:Flink 将批处理视为有限数据流的特例,因此可以高效地处理批量数据。
  • 低延迟和高吞吐Flink 支持事件驱动的计算模型,能够以毫秒级延迟处理数据,同时保持高吞吐量。
  • 事件时间支持Flink 对事件时间有原生支持,可以根据数据的发生时间(而非到达时间)进行处理。这使得 Flink 能够处理乱序数据和延迟数据。
  • 分布式计算和容错机制:Flink 提供了分布式执行环境,能够在多节点集群中运行任务。无论是流处理还是批处理,Flink 都支持一致的 状态管理 和 容错机制。Flink 在流处理任务中通过 检查点 和 保存点 保障状态一致性,而在批处理任务中也可以通过类似的机制来确保数据处理的一致性和容错。
  • 跨语言支持:允许使用 Java、Scala、Python 等语言进行流处理和批处理。通过 PyFlink,Python 用户可以在 Flink 上执行数据处理任务。Flink 还支持统一的 SQL 接口、REST API 和跨语言 UDFs,方便不同语言的开发者协作与集成。
  • 丰富的 API:Flink 提供丰富的 API,包括 DataStream(流处理)、DataSet(批处理)、Table API & SQL(声明式查询)、CEP(复杂事件处理)、Stateful Functions(有状态函数)和 Gelly(图计算),支持多样化的数据处理需求,适用于实时、批量和复杂事件场景。
  • 扩展性强:Flink 提供了丰富的连接器,可轻松集成 Kafka、Hadoop、HBase 等外部系统,同时还支持插件化架构,方便开发者扩展功能。

四、Flink的核心组件

  • JobManager(任务调度与协调):负责接收用户提交的作业,将其拆分为任务并分配给 TaskManager,同时管理作业的执行状态、检查点和故障恢复,是集群的“大脑”。
  • TaskManager(任务执行与计算):负责运行 JobManager 分配的任务,处理数据计算,管理任务的内存、网络和状态,并与其他 TaskManager 通信以完成数据交换。
  • Dispatcher(作业提交入口):提供 REST 接口,接收用户提交的作业并将其传递给 JobManager,支持多租户和交互式作业提交。
  • DataStream/DataSet API(流批处理编程接口):DataStream API 用于处理无界数据流,DataSet API 用于处理有界数据集,提供丰富的操作符支持复杂计算。
  • State(状态管理):用于存储任务在计算过程中的中间结果和上下文信息,支持键控状态(Keyed State)和算子状态(Operator State),确保数据处理的连续性和一致性。
  • Checkpoint(检查点机制):通过分布式快照定期保存任务的状态,用于故障恢复,提供精确一次(Exactly-Once)语义保障,确保数据处理的准确性和可靠性。 

五、Flink和其它框架的对比

特点FlinkSparkStorm
处理模式流为核心,批处理是流的特例批为核心,流处理通过微批实现原生流处理
事件时间支持原生支持需借助第三方库(Structured Streaming)不支持
状态管理原生支持基本支持(需要扩展)依赖外部存储
延迟毫秒级毫秒至秒级毫秒级
容错机制支持 Checkpoint 和状态恢复支持需手动实现

六、Flink应用

1、应用实例

本实例基于 Spring Boot 集成 Flink、RabbitMQ 和 ClickHouse,实现了一个实时超速分析功能。该功能从 RabbitMQ 接收车辆定位数据,通过 Flink 进行实时分析,判断是否发生超速报警,并将分析结果写入 ClickHouse 数据库。

2、项目结构

src/main/java└── com.cnstar.gps.flink├── config│   ├── FlinkConfig.java       // Flink 配置类│   ├── RabbitMQConfig.java    // RabbitMQ 配置类├── entity│   ├── LocationData.java      // 定位数据实体类│   ├── OverspeedResult.java   // 超速结果实体类├── mapper│   └── OverspeedResultMapper.java // MyBatis-Plus Mapper 接口├── job│   └── OverspeedProcessJob.java // Flink 超速分析任务└── Application.java           // Spring Boot 启动类
http://www.dtcms.com/a/388829.html

相关文章:

  • 微信小程序插屏广告(InterstitialAd)全解析与实战应用案例
  • 格雷希尔G70R系列快速密封连接器+GT系列软管组件的配套组合方案,在新能源汽车老化测试的应用
  • 【Debug日志| 随机下降】
  • 滑动窗口法的优化与实战——力扣209.长度最小的子数组
  • 【Spring Boot 报错已解决】org.yaml.snakeyaml.scanner.ScannerException 报错原因与解决方案
  • 国家统计局数据读取——数据读取——清洗数据06
  • 基于 scratch 构建简单镜像
  • Web安全的暗角:10大易忽略逻辑漏洞解析!
  • 矩阵奇异值分解算法(SVD)详解
  • 【FreeRTOS】 二值信号量与互斥量(CMSIS-RTOS v2 版本)
  • Qt C++ :Qt全局定义<QtGlobal>
  • 【STL源码剖析】从源码看 list:从迭代器到算法
  • MySQL 专题(三):事务与锁机制深度解析
  • 使用BLIP训练自己的数据集(图文描述)
  • Geoserver修行记--在geoserver中如何复制某个图层组内容
  • DBG数据库透明加密网关:SQLServer应用免改造的安全防护方案,不限制开发语言的加密网关
  • 不同上位开发语言、PLC下位平台、工业协议与操作系统平台下的数据类型通用性与差异性详解
  • 【入门篇|第二篇】从零实现选择、冒泡、插入排序(含对数器)
  • javaweb Servlet基本介绍及开发流程
  • MySQL MHA高可用
  • 整体设计 逻辑拆解之2 实现骨架:一元谓词+ CNN的谓词系统
  • SpEL(Spring Expression Language)学习笔记
  • Java 字节码进阶3:面向对象多态在字节码层面的原理?
  • Tensor :核心概念、常用函数与避坑指南
  • 机器学习实战·第四章 训练模型(1)
  • 一次因表单默认提交导致的白屏排查记录
  • Linux:io_uring
  • 《第九课——C语言判断:从Java的“文明裁决“到C的“原始决斗“——if/else的生死擂台与switch的轮盘赌局》
  • 学习日报|Spring 全局异常与自定义异常拦截器执行顺序问题及解决
  • Spring Boot 参数处理