最火热的分布式流式处理引擎-Flink入门介绍

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: Flink是目前流行的分布式流式处理引擎,是Apache的顶级项目。Flink支持高吞吐、低延迟、高性能、Exactly-Once语义等特性,同时其基于"批是特殊的流"的理念,既实现了流式处理计算,又实现了批处理计算,达到了真正意义上的批流统一。

一、什么是Flink?

Flink是目前流行的分布式流式处理引擎,是Apache的顶级项目。Flink支持高吞吐、低延迟、高性能、Exactly-Once语义等特性,同时其基于"批是特殊的流"的理念,既实现了流式处理计算,又实现了批处理计算,达到了真正意义上的批流统一。

Flink具备极高的处理能力,集群可达数千服务器的规模。目前在国内已经被广泛接受,一些著名的互联网公司,如阿里巴巴、美团、滴滴、今日头条等,都在大规模使用Flink,其中阿里巴巴还基于Flink进行深度定制,提供了Blink版本,将将其一些新特性贡献给了开源社区。

可以说,Flink是未来流式计算的闪耀之星。

二、Flink应用场景

所有的软件都要有好的应用场景才能够被不断优化,向前发展。既然Flink具备高性能的流式处理能力,那么实际可以应用到哪些方面呢?

在实际的生产应用环境中,涉及到流式的计算实际上是非常多的,因为各个系统都在不断地产生大量数据,例如用户购买数据、用户行为数据、系统运行日志数据、交易统计数据等,这些场景下都会涉及大量的计算工作,传统地处理方式更多是离线批量地处理,实效性上比较差,难以适应现在业务发展的需要,而Flink天生适合这种应用场景。

2.1 实时推荐

收集用户行为数据,进行实时计算,将计算结果更新到推荐模型中,然后反过来对用户的喜爱进行实时预测,然后将推荐数据展示给用户,提高用户对商品的匹配度。用户行为的数据是十分巨大的,而快速计算实时反馈又是十分必要的,因为用户的浏览购买行为是有时间限制的,类似这种场景,高吞吐、高性能的FLink正好排上用场。

2.2 实时反欺诈行为检测

在金融领域中,为保障安全和减少损失,反欺诈系统是必不可少的。传统的反欺诈手段需要较长的时间,大部分只能提供事后的追查,而无法提前规避。使用Flink能够实时完成反欺诈规则的过滤和判断,快速给出结果,提前对信用卡申请欺诈行为、交易欺诈行为等进行防堵。

2.3 实时报表

传统的数据报表都是T+N的模式,例如T+2日出账单,T+1日出结算报表等,整体时效性比较差,用户体验也不够好,在信息化的今天,实时的数据报表已经是十分常见的需求了。使用FLink采集来自多个系统的数据源进行数据的清洗,按照一定的规则实时出数据报表,这是一件很自然的事情。

2.4 实时大屏

实时大屏是目前最广泛的一个应用了,典型的代表就是淘宝双11的监控大屏,据报道其计算性能达到超过30万笔/秒。Flink的高性能适合这种大流量的流失处理场景,并且其提供的Window、Time等功能,能够轻松地应付诸如1分钟内交易笔数、5分钟交易金额这类统计需求。

2.4 系统监控分析

使用Flink流式计算对各类服务、app运行的相关指标数据、用户行为数据进行数据分析,实时提供相关的监控和哦统计数据,为发现服务异常、市场广告决策等提供参考。

以上是一些场景的Flink的应用场景,当然Flink的应用绝不仅仅如此,所有需要高性能的、高吞吐、低延迟的流式计算场景,都可以考虑使用Flink。

三、同类比较

说到流式计算,大家一定会想到Apache Storm、Spark Streaming,这两个也是开源界中流式计算十分热门的产品,那么与Flink有什么异同点呢?在实际技术选型的时候应该选择哪一种呢,下面我们来对这几个流式处理框架进行一下比较。

流计算框架对比.PNG

从以上对比来看,如果应用场景下需要同时支持批处理计算和流处理计算、需要支持Exactly-Once语义或者需要有状态的流计算,那么可以可以排除Storm,选择Flink或者Spark Streaming。

若是只需要进行基于无状态的流式计算,且对吞吐量没有太高要求,并且对于低延迟要求较高,那么可以考虑选择Storm或者Flink,Storm目前成熟度更高,且在行业内应用更加广泛,出现问题更加方便定位。

在Flink和Spark  Streaming的选择上,Flink明显在有状态的计算以及延时方面优于Spark  Streaming,两者对于批和流的理念是完全不一样的,Flink将批当作特殊的流,其对于流的支持的原生的,其延时达到毫秒级,而Spark  Streaming认为流是特殊的批,是将流当作微批来处理,所以在延时上一般是在秒级。

当然目前来看Spark Streaming的成熟度会优于Flink,但是Flink目前发展势头强劲,国内多家互联网巨头已经在尝试往Flink转型,社区的成熟度也越来越高,Flink的发展是势不可挡的。

三、Flink的技术架构

3.1 软件技术栈

Flink的软件技术栈如下图所示,遵循的是分层的架构,从上到下分别是API和Libraries层、Runtime核心层和物理部署层。

1.png

  • API和Libraries层 Flink提供了DataStream API用于支持流式计算,提供了DataSet  API用于支持批处理计算。另外为了方便用户的使用提供更加高层的功能,基于DataStream  API之上构建了CEP(复杂事件处理库)和Table API以及SQL(用于流),基于DataSet  API之上提供了FlinkML机器学习库、Gelly图像处理库、Table API和SQL(用于批)。这里也体现出了Flink  API的完善,为不同的需要提供了不同粒度的API,如Table API和SQL使用简单,但是可定制化弱,功能较单一,DataStream  API以及更加底层的API则提供更加丰富的功能,但是更加复杂。
  • Runtime核心层Runtime核心层是Flink计算框架的核心实现部分,作业提交、任务调度、状态收集、容错恢复等功能都与这一层相关。
  • 物理部署层物理部署层提供了不同形式的部署支持,例如本地单机部署,基于YARN的集群部署,云版本等。

3.2 逻辑架构

Flink逻辑架构如下如所示,Flink采用Master-Slave的架构,JobManager作为Master角色,整个集群中只能有一个活跃的Master(JobManager),TaskManager作为Slave角色(Worker),集群中TaskManager的数量可达数千台。

  • JobMangerJobManager负责整个Flink集群的任务调度和资源管理,负责与TaskManager交互,为应用分配Task   Slot资源,并通知TaskManager启动应用,任务完成以后也会将状态返回给Client。另外JobManager还负责Checkpoint的管理,出发TaskManager执行Checkpoint操作,以便于故障恢复。
  • TaskManagerTaskManager负责具体节点的资源申请和管理,接收JobManager的命令进行相应的任务操作。TaskManager使用心跳机制保持与JobManager的感知,定期汇报资源、状态统计信息到JobManager。当Client提交一个任务时,JobManager根据TaskManager汇报的资源情况选择某一个具体执行任务的TaskManager,将任务分配给它执行。TaskManager之间可以通过数据流的方式进行数据交互。
  • Actor System负责JobManager和TaskManager之间的通讯,Actor是Akka  Framework的一个角色,Akka是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java 和 Scala 的  Actor 模型应用,常用于分布式高并发的场景下。
  • Client客户端用于提交任务到Flink集群,其仍然是通过Akka Framework构建网络连接。Flink程序会通过Optimizer和Graph Builder生成JobGraph,通过Client提交到JobManager。

2.png

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
2月前
|
存储 SQL 分布式数据库
OceanBase 入门:分布式数据库的基础概念
【8月更文第31天】在当今的大数据时代,随着业务规模的不断扩大,传统的单机数据库已经难以满足高并发、大数据量的应用需求。分布式数据库应运而生,成为解决这一问题的有效方案之一。本文将介绍一款由阿里巴巴集团自主研发的分布式数据库——OceanBase,并通过一些基础概念和实际代码示例来帮助读者理解其工作原理。
179 0
|
5天前
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
14 1
|
23天前
|
Dubbo Java 应用服务中间件
分布式-dubbo的入门
分布式-dubbo的入门
|
3月前
|
SQL 关系型数据库 MySQL
如何在Dataphin中构建Flink+Paimon流式湖仓方案
当前大数据处理工业界非常重要的一个大趋势是一体化,尤其是湖仓一体架构。与过去分散的数据仓库和数据湖不同,湖仓一体架构通过将数据存储和处理融为一体,不仅提升了数据访问速度和处理效率,还简化了数据管理流程,降低了资源成本。企业可以更轻松地实现数据治理和分析,从而快速决策。paimon是国内开源的,也是最年轻的成员。 本文主要演示如何在 Dataphin 产品中构建 Flink+Paimon 的流式湖仓方案。
7636 10
如何在Dataphin中构建Flink+Paimon流式湖仓方案
|
2月前
|
机器学习/深度学习 并行计算 PyTorch
PyTorch与DistributedDataParallel:分布式训练入门指南
【8月更文第27天】随着深度学习模型变得越来越复杂,单一GPU已经无法满足训练大规模模型的需求。分布式训练成为了加速模型训练的关键技术之一。PyTorch 提供了多种工具来支持分布式训练,其中 DistributedDataParallel (DDP) 是一个非常受欢迎且易用的选择。本文将详细介绍如何使用 PyTorch 的 DDP 模块来进行分布式训练,并通过一个简单的示例来演示其使用方法。
77 2
|
2月前
|
Java Spring 安全
Spring 框架邂逅 OAuth2:解锁现代应用安全认证的秘密武器,你准备好迎接变革了吗?
【8月更文挑战第31天】现代化应用的安全性至关重要,OAuth2 作为实现认证和授权的标准协议之一,被广泛采用。Spring 框架通过 Spring Security 提供了强大的 OAuth2 支持,简化了集成过程。本文将通过问答形式详细介绍如何在 Spring 应用中集成 OAuth2,包括 OAuth2 的基本概念、集成步骤及资源服务器保护方法。首先,需要在项目中添加 `spring-security-oauth2-client` 和 `spring-security-oauth2-resource-server` 依赖。
46 0
|
2月前
|
消息中间件 数据挖掘 Kafka
揭秘大数据时代的极速王者!Flink:颠覆性流处理引擎,让实时数据分析燃爆你的想象力!
【8月更文挑战第29天】Apache Flink 是一个高性能的分布式流处理框架,适用于高吞吐量和低延迟的实时数据处理。它采用统一执行引擎处理有界和无界数据流,具备精确状态管理和灵活窗口操作等特性。Flink 支持毫秒级处理和广泛生态集成,但学习曲线较陡峭,社区相对较小。通过实时日志分析示例,我们展示了如何利用 Flink 从 Kafka 中读取数据并进行词频统计,体现了其强大功能和灵活性。
45 0
|
2月前
|
SQL 监控 大数据
Serverless 应用的监控与调试问题之Flink流式数仓对于工商银行的数据链路要如何简化
Serverless 应用的监控与调试问题之Flink流式数仓对于工商银行的数据链路要如何简化
|
2月前
|
存储 Java 流计算
Flink 分布式快照,神秘机制背后究竟隐藏着怎样的惊人奥秘?快来一探究竟!
【8月更文挑战第26天】Flink是一款开源框架,支持有状态流处理与批处理任务。其核心功能之一为分布式快照,通过“检查点(Checkpoint)”机制确保系统能在故障发生时从最近的一致性状态恢复,实现可靠容错。Flink通过JobManager触发检查点,各节点暂停接收新数据并保存当前状态至稳定存储(如HDFS)。采用“异步屏障快照(Asynchronous Barrier Snapshotting)”技术,插入特殊标记“屏障(Barrier)”随数据流传播,在不影响整体流程的同时高效完成状态保存。例如可在Flink中设置每1000毫秒进行一次检查点并指定存储位置。
43 0
|
2月前
|
消息中间件 分布式计算 Kafka
流计算引擎数据问题之MillWheel 和 Flink 实现数据流的同步处理如何解决
流计算引擎数据问题之MillWheel 和 Flink 实现数据流的同步处理如何解决
31 0