Flink--特性与使用场景
原文网址:Flink--特性与使用场景-CSDN博客
简介
本文介绍Flink的特性与使用场景。
Flink 的产生背景
这里介绍大数据的发展历程。
1.1 传统数据处理时代(单机)
最早数据量较小,用单机 MySQL、Excel 等工具即可处理;
数据增多后,引入 Hadoop MapReduce 解决大规模离线计算问题。
1.2 Hadoop MapReduce 的局限
- 高延迟:Map → Shuffle → Reduce,一次作业起码几十秒起步;
- 批处理为主,难以支持实时需求;
- 编程模型复杂,开发周期长;
- 流处理能力差。
- 不适用实时数据处理和大数据背景下的低延迟需求。
1.3 Spark 的出现
Spark 弥补了 MapReduce 的缺陷,引入 RDD 内存计算模型;
支持批处理 + 结构化查询 + 简单流处理;
但 Spark Streaming 是微批处理(mini-batch),不是真正的事件驱动流计算。
1.4 Flink 的诞生
Flink 出现于 2014 年的 Apache 孵化项目,目标就是:真正的实时计算引擎,兼容批处理但以流处理为核心(批流一体)。
什么是 Flink?
Apache Flink 是一个分布式、高性能、可扩展、真正事件驱动的流式处理框架。
在Flink的世界观中,一切都是由流组成的,离线数据是有界限的流,实时数据是一个没有界限的流,这就是有界流和无界流。
无界流:有定义流的开始,但没有定义流的结束。会不停地产生数据,无界流的数据必须立刻处理。处理无界数据通常要求以特定顺序摄取事件,例如事件发生的顺序,以便能够推断结果的完整性。
有界流:有定义流的开始,也有定义流的结束。有界流可以在摄取所有数据后再进行计算。有界流所有数据可以被排序,所以并不需要有序摄取。有界流处理通常被称为批处理。
Flink处理的流程
Flink的特点
1.批流一体
支持流处理和批处理。
2.同时支持高吞吐、低延迟、高性能
Flink 是目前开源社区中唯一一套集高吞吐、低延迟、高性能三者于一身的分布式流式数据处理框架。每核每秒可处理 150 万条数据。
Apache Spark:只能兼顾高吞吐和高性能特性,主要因为在Spark Streaming 流式计算中无法做到低延迟保障;
Apache Storm:只能支持低延迟和高性能特性,但是无法满足高吞吐的要求。
3.容错可以保证精准一次
基于轻量级分布式快照(CheckPoint)实现的容错。
Flink 能够分布式运行在上千个节点上,将一个大型计算任务的流程拆解成小的计算过程,然后将 tesk 分布到并行节点上进行处理。
在任务执行过程中,能够自动发现事件处理过程中的错误而导致数据不一致的问题,比如:节点宕机、网路传输问题,或是由于用户因为升级或修复问题而导致计算服务重启等。
在这些情况下,通过基于分布式快照技术的 Checkpoints,将执行过程中的状态信息进行持久化存储,一旦任务出现异常停止,
Flink 就能够从 Checkpoints 中进行任务的自动恢复,以确保数据在处理过程中的一致性(Exactly-Once)。
4.支持事件时间
大多数框架窗口计算采用的都是系统时间(Process Time),也是事件传输到计算框架处理时,系统主机的当前时间。
Flink 能够支持基于事件时间(EventTime)语义进行窗口计算,也就是使用事件产生的时间,这种机制使得事件即使乱序到达,流系统也能够计算出精确的结果,保持了事件原本产生时的时序性,尽可能避免网络传输或硬件系统的影响。
5.支持有状态计算
Flink 在 1.4 版本中实现了状态管理,所谓状态就是在流式计算过程中将算子的中间结果数据保存在内存或者文件系统中,等下一个事件进入算子后可以从之前的状态中获取中间结果中计算当前的结果,从而无须每次都基于全部的原始数据来统计结果,这种方式极大地提升了系统的性能,并降低了数据计算过程的资源消耗。
6.支持高度灵活的窗口操作
在流处理应用中,需要通过窗口对流数据进行一定范围的聚合计算,
例如统计在过去的 1 分钟内有多少用户点击某一网页,在这种情况下,我们必须定义一个窗口,
用来收集最近一分钟内的数据,并对这个窗口内的数据进行再计算。
Flink 将窗口划分为基于 Time、Count、Session,以及 Data-driven 等类型的窗口操作,
窗口可以用灵活的触发条件定制化来达到对复杂的流传输模式的支持,用户可以定义不同的窗口触发机制来满足不同的需求。
7.基于 JVM 实现独立的内存管理
Flink 实现了自身管理内存的机制,尽可能减少 JVM GC 对系统的影响。
另外,Flink 通过序列化/反序列化方法将所有的数据对象转换成二进制在内存中存储,降低数据存储的大小的同时,能够更加有效地对内存空间进行利用,降低 GC 带来的性能下降或任务异常的风险,因此Flink 较其他分布式处理的框架会显得更加稳定,不会因为 JVM GC 等问题而影响整个应用的运行。
8.保存点
对于 7*24 小时运行的流式应用,数据不断地接入,在一段时间内应用的终止有可能导致数据的丢失或者计算结果的不准确,例如进行集群版本的升级、停机运维操作等操作。
Flink 通过 Save Points(保存点)技术将任务执行的快照保存在存储介质上,当任务重启的时候可以直接从事先保存的 Save Points 恢复原有的计算状态,使得任务继续按照停机之前的状态运行,Save Points 技术可以让用户更好地管理和运维实时流式应用。
Flink的使用场景
1. 电商与零售(如阿里巴巴、京东、拼多多)
实时大屏:双11、618等大促期间,Flink 实时计算交易额、订单量、用户访问量等核心指标,并展示在数据大屏上,延迟控制在秒级。
实时推荐:基于用户行为(如点击、加购、购买)实时更新推荐模型,提升个性化推荐效果。
风控与反欺诈:检测异常交易(如刷单、盗刷),实时拦截高风险订单。
2. 金融与支付(如蚂蚁集团、银行机构)
实时风控:监控交易流水,识别欺诈行为(如高频转账、异常登录),实现毫秒级风险拦截。
实时结算:支付成功后,实时更新账户余额和交易记录。
市场行情分析:证券、外汇等实时行情数据的流式处理,支持量化交易。
3. 物流与出行(如美团、滴滴)
订单实时追踪:物流状态(如骑手位置、配送进度)实时更新,提升用户体验。
交通调度优化:基于实时 GPS 数据优化路线规划,减少拥堵和等待时间。
4. 制造业与 IoT(如小米、华为)
生产线监控:实时分析传感器数据(如设备温度、能耗),预测故障并触发维护警报。
质量控制:实时检测产品缺陷,调整生产线参数以减少不良品率。
5. 内容与社交(如字节跳动、B站、快手)
实时用户画像:基于用户互动(点赞、评论、观看时长)实时更新兴趣标签,优化内容推荐。
广告实时竞价(RTB):在毫秒级内完成广告曝光竞价,提升广告投放效率。
6. 游戏与娱乐(如网易、腾讯)
实时玩家行为分析:检测作弊行为(如外挂、异常交易),保障游戏公平性。
服务器性能监控:实时分析游戏服务器负载,动态调整资源分配。
7. 运营商与通信(如中国移动、华为)
网络流量监控:实时检测 DDoS 攻击、异常流量,保障网络安全。
5G 数据处理:低延迟处理海量设备连接数据,支持智能城市、工业 IoT 等场景。
Flink的源和接收器
Apache Flink 是一个分布式流处理框架,它支持多种数据源(source)和数据接收器(sink)。以下是一些常见的 Flink source 和 sink:
Source(数据源)
- 文件系统:可以从本地文件系统、HDFS、S3 等读取文件。
- Kafka:从 Apache Kafka 主题中读取数据。
- 数据库:通过 JDBC 连接从关系型数据库(如 MySQL、PostgreSQL)中读取数据。
- 消息队列:如 RabbitMQ、ActiveMQ 等。
- Socket:从网络套接字中读取数据。
- 自定义源:用户可以实现自定义的 SourceFunction 来读取特定的数据源。
- 集合:从 Java 集合(如 List、Array)中读取数据,通常用于测试。
- Elasticsearch:从 Elasticsearch 中读取数据。
- Kinesis:从 Amazon Kinesis 流中读取数据。
- Pulsar:从 Apache Pulsar 主题中读取数据。
Sink(数据接收器)
- 文件系统:将数据写入本地文件系统、HDFS、S3 等。
- Kafka:将数据写入 Apache Kafka 主题。
- 数据库:通过 JDBC 连接将数据写入关系型数据库(如 MySQL、PostgreSQL)。
- 消息队列:如 RabbitMQ、ActiveMQ 等。
- Socket:将数据写入网络套接字。
- 自定义接收器:用户可以实现自定义的 SinkFunction 来写入特定的目标。
- Elasticsearch:将数据写入 Elasticsearch。
- Kinesis:将数据写入 Amazon Kinesis 流。
- Pulsar:将数据写入 Apache Pulsar 主题。
- 打印:将数据输出到标准输出(通常用于调试)。