首页 > 其他分享 >Flink简介

Flink简介

时间:2022-10-04 16:32:37浏览次数:75  
标签:状态 处理 简介 Flink 批处理 处理器 数据

参考官网: ​​https://flink.apache.org/​

1. 简单介绍

  Flink 是Apache旗下的一个框架和分布式处理引擎。用于对无界和有界数据流进行有状态计算,核心目标是数据流上的有状态计算(Stateful Computations over Data Streams)。处理的是流式数据(Data Flow),数据流的含义就是数据并不是收集好的,而是像水流一样,逐个到来,逐个处理。所以Flink 适合的场景也就是需要实时处理数据流的场景。

  Flink 被设计再常见的集群环境中运行,以内存执行速度和任意规模来执行计算。

  框架处理流程图如下:

Flink简介_流处理

2.主要应用场景

1. 电商和市场营销

比如:实时数据报表、广告投放、实时推荐、PV(PageView)和UV(UserView-根据IP来筛选)统计等。

2. 物联网(IOT)

传感器实时数据采集和现实、实时报警、交通运输业

3. 物流配送和服务业

订单实时更新、通知信息推送

4. 银行和金融行业

实时结算和通知推送、实时检测异常行为。

3. 核心概念

1. 有界数据和无界数据

任何被处理的数据都可以被称为事件流。比如银行账单、机器日期、用户在网站的交互等。

无界数据:有明确的开始但是没有结束。无界数据能持续不断的被处理。

有界数据:有明确的开始和结束

Flink简介_批处理_02

2. 流处理和批处理

数据流:数据是一个一个来,是一组有序的数据序列。数据是来一个处理一个,这种处理模式就是流处理,也叫做实时处理。

批量数据(数据集):数据是一批同时到来,是一个有限的数据集。数据是读一批然后一起计算,这种方式叫做批处理,也叫做离线处理。

打个比喻:聊天和发信息。聊天就可以理解为数据流,信箱就可以理解为批量数据。聊天需要我们时刻关注新消息,会耗费大量精力,工作效率会受到影响。这也是传统的数据处理架构倾向于先收集数据再处理的原因。

3. 有状态的流处理

  有状态的流处理:现实应用中,我们需要把一些数据保存到数据库或者其他地方进行处理(数据具有状态),处理完成只会更新状态,在传统的架构中,这个状态保存再数据库里,这就是所谓的有状态的流处理。

  可以用下图表示:

Flink简介_数据_03

 

   我们需要保护本地状态,防止再处理过程中发生故障导致数据丢失。解决方法可以定期地将应用状态的一致性检查点(checkpoint)存盘,写入远程的持久化存储,遇到故障再去读取进行恢复,这样就保证了更好的容错性。

  有状态的流处理一般有以下几种典型应用。

(1) 事件驱动型应用

  从一个或多个事件读取数据,并根据到来的事件触发计算、状态更新或其他外部动作。比较典型的是以Kafka 为代表的消息队列。

(2) 数据分析型应用

  从原始数据中提取信息和发掘规律。传统上是将数据复制到数据仓库,然后批量查询。如果数据有了更新,必须将数据添加到要分析的数据集中,然后重新查询或应用程序。现在的做法一般是将大量数据(日志文件)写入分布式文件系统(HDFS)或HBase 等批量存储数据库,以较低的成本进行大容量存储。 然后可以通过sql-on-hadoop 累的引擎查询和处理数据,比如Hive。这种处理方式就是典型的批处理。

(3)数据管道型应用

  ETL也就是数据提取、转换、加载,是在存储系统之家转换和移动数据的常用方法。在数据分析的应用中,通常会定期触发ETL 任务,将数据从事务数据库系统复制到分析数据库或数据仓库。数据管道的作用于ETL类似。它们可以转换和扩展数据,也可以在存储系统之家移动数据。只不过流处理来搭建数据管道,这些工作可以连续运行,不需要再周期性触发。 比如:数据管道可以用来监控文件系统目录的新文件、将数据写入事件日志。ETL与数据管道区别如下:

Flink简介_流处理_04

 

 4. 流处理-lambda 架构

  对于有状态的流处理,当数据越来越多时,必须用分布式的集群架构来获取更大的吞吐量。分布式架构带来的问题就是如何保证数据处理的顺序。

  批处理来说好处理,因为是一批一批处理,可以对一批进行选择、排序; 流处理是一条一条处理,所以比较复杂。因此出现了lambda 架构,lambda 架构可以理解为第一代流处理器和批处理器的简单合并:

Flink简介_批处理_05

 

   批处理层由传统的批处理器和存储组成,实时层由流处理器实现。数据到达后,两层一起处理,一方面由流处理器实时处理,另一方面写入批处理存储空间,等待皮处理器批量计算。流粗利器快速计算出一个近似结果,将它们写入流处理表中;而皮处理器会定期处理存储中的数据,将准确的结果写入批处理表,并从流处理表中删除不正确的结果。最终,应用程序会合并快速表和批处理表中的结果,并展示出来。(我理解有点类似于分布式事务的最终一致性)。

5. 新一代流处理器-flink

  先前的流处理器只能在高吞吐和低延迟中二选一,新一代设计兼顾两者。其具备如下特点:

(1) 高吞吐和低延迟。每秒处理数百万个事件,毫秒级延迟

(2)结果的准确性:提供了事件时间和处理时间语义。对于乱序事件流,事件时间语义仍然能提供一致且准确的结果。

(3)精确一次的状态一致性保证

(4)可以连接常用的存储系统:kafka、es、jdbc、分布式文件系统(HDFS等)

(5)高可用。本身高可用的设置,加上与K8S、YARN等紧密集成

(6)能够更新应用程序代码并将作业迁移到不同的Flink 集群,而不丢失应用程序的状态.

4. Flink分层API

  其整体API分层如下:

Flink简介_数据_06

 

 最高层:仅提供了有状态流,将处理函数嵌入到了DataStream API中。

TableAPI:以表为中心的声明式编程,其中表在表达流数据时会动态变化。遵循关系模型:二维数据结构(类似于关系库的表)。提供类似于select、join、group-by、aggregate 等操作。

DataStream、DataSet :核心的操作。我们可以在tableAPI与这两者之间切换。

 

【当你用心写完每一篇博客之后,你会发现它比你用代码实现功能更有成就感!】



标签:状态,处理,简介,Flink,批处理,处理器,数据
From: https://blog.51cto.com/u_12826294/5731346

相关文章

  • Python 入门指南第三节 | Python 简介
    3.Python简介下面的例子中,输入和输出分别由大于号和句号提示符(​​>>>​​​和​​...​​)标注:如果想重现这些例子,就要在解释器的提示符后,输入(提示符后面的)那些不包含......
  • Servlet——简介
    Servlet  快速入门  1、创建web项目,导入Servlet依赖坐标<dependencies><dependency><groupId>javax.servlet</groupId><artifac......
  • 机器学习简介
    1.人工智能发展必备三要素数据、算法、计算力(CPU\GPU\TPU)CPU、GPU对比:CPU适合IO密集型任务;GPU适合计算密集型任务。2.人工智能、机器学习、深度学习关系人工智能机器......
  • 【THM】Metasploit: Introduction(Metasploit简介)-学习
    介绍Metasploit是应用最广泛的利用框架之一,它是一个强大的工具,可以支持渗透测试的所有阶段,从信息收集到后渗透。Metasploit有两个主要版本:MetasploitPro:促进任......
  • CPU--结构与功能简介2--中断系统
    中断请求标记:INTR中断判优逻辑:(硬件)排队器实现,(软件)程序查询。中断服务程序入口地址查找:硬件向量法,软件查询法;中断响应:响应中断的条件,EINT置1,响应中断的时间,执行周期结束......
  • CPU--结构和功能简介1
    1.结构和功能简介 功能决定结构; 2.指令周期:取址周期,间址周期,执行周期,中断周期;3.指令流水指令流水:各级部件最大时间执行,没有停顿。 ......
  • 01-Elasticsearch[简介, 核心术语, 架构原理, 倒排索引]
    什么是分布式搜索引擎搜素引擎分布式存储与搜索Lucene,Solr,ES倒排序索引Lucene是类库solr基于LuceneES基于LuceneES核心术语ES集群架构原理倒排索引......
  • 【博学谷学习记录】超强总结,用心分享|Java基础分享-Redis基础简介
    1.1Redis简介1.2Redis资料1.2.1初步教程1.2.2其他教程2.1做为数据库与之比较2.2做为高速缓存与之比较2.3做为消息队列与之比较一、Redis基础知识1.1Redis......
  • 反绎学习简介
    反绎学习@目录反绎学习1.逻辑推理与机器学习1.1逻辑推理1.2机器学习1.3逻辑推理与机器学习的传统结合2.反绎学习2.1一个小例子:玛雅历法2.2推广周志华2020CCF-GAIR......
  • 003.Spring AOP的原理——Spring AOP简介——AOP的核心概念——AOP的2种代理方式——A
    1.6SpringAOP原理SpringAOP通过面向切面技术将与业务无关却为业务模块所共用的逻辑代码封装起来,以提高代码的复用率,降低模块之间的耦合度。SpringAOP将引用分为核心......