Flink 有状态流式处理

这篇具有很好参考价值的文章主要介绍了Flink 有状态流式处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

传统批次处理方法

Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端
【1】持续收取数据(kafka等),以window时间作为划分,划分一个一个的批次档案(按照时间或者大小等);
【2】周期性执行批次运算(Spark/Stom等);

传统批次处理方法存在的问题:
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端
【1】假设计算每小时出现特定事件的转换次数(例如:1、2…),但某个事件正好处于1到2之间就尴尬了。需要将1点处理一半的结果带到2点这个批次中进行运算。而这个划分跟我们事件发生的时间也是有误差的。
【2】在分布式多线程的情况下,如果接收到事件的顺序颠倒了,又该如何处理?

理想方法

累积状态:表示过去历史接收过的所有事件。可以是计数或者机器模型等等。
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端我们要处理一个持续维护的状态时,最适合的方式就是状态流处理(累积状态和维护状态+时间,是不是该收的结果都收到了)
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端
【1】有状态流处理作为一种新的持续过程范式,处理连续的数据;
【2】产生准确的结果;
【3】实时可用的结果仅为模型的自然结果;

流式处理

流处理系统或者流处理引擎都是数据驱动的,而不是定期或者人为的去触发。数据也没有物理边界。
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端
一般系统都会把操作符放上去,等待数据的到来进行计算。如下是一个逻辑模型(DAG
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端

分散式流式处理

Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端
【1】从数据中选择一个属性作为key对输入流进行分区;
【2】使用多个实例,每个实例负责部分key的存储,根据Hash值,相同的key一定落在相同的分区进行处理;
【3】根据流式数据处理的DAG模型,有对应如下的分布式流处理的实例模型。例如A算子拥有两个实例,上游的实例节点可能同时与下游的一个或多个节点进行传输。这些实例根据系统或者人为的因素分配在不同的节点之上。节点与节点之间数据传输也会涉及网络之间的占用。本地的传输就不需要走网络
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端

有状态分散式流式处理

定义一个变量X,输出结果依据这个X,这个X就是一个状态。有状态分散的流失处理引擎,当状态可能会累计非常大。当key比较多的时候就会超出单台节点的负荷量。这个x就应该有状态后台使用memory去维护它。【数据倾斜】
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端

状态容错(State Fault Tolerance)

状态挂了,如何确保状态拥有精确一次(exactly-onceguarantee)的容错保证?就是通过定期的快照+事件日志位置。我们先假设一个简单的场景,如下,一个队列在不断的传输数据。单一的process在处理数据。这个process没处理一个数据都会累计一个状态。如何为这个process做一个容错。做法就是没处理完一笔,更改完状态之后,就做一次快照(包含它处理的数据在队列中的位置和它处理到的位置以及当时的状态进行对比)
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端
举个例子:如下我处理到第二笔数据,我就会记录下第二个位置在进入process之前的信息(位置X+状态@X
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端
当进入process处理的时候出现了fail时,Flink就会根据上一次的位置+状态进行恢复。

如何在分散式场景下替多个拥有本地状态的运算子产生一个全域一致的快照(global consistent snapshot)?
方式一:更改该任务流过的所有运算子的状态。比较笨,有一个副作用,就是我处理完这笔数据,它应该就到了一个process,我本应该做其他数据的处理了,可是为了全局一致性快照就会停止前面和当前的process的运算来保证全局一致性。
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端

分散式状态容错

通过checkpoint实现分散式状态容错
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端
每一个运算子它本地都有一个维护一个状态,当要产生一个检查点(checkpoit)的时候,都会将这个检查点存储在一个更小的分布式文件系统DFS中。当出现某个算子fail之后,就会从所有的checkpoint中获取所有算子的上一个状态进行恢复。把消息队列的位置也进行恢复。也就是多线程工作,每一个任务在DFS中就可以看作一个线程,它们数据存储的key就是这个任务,每一个算子的处理状态都会按照处理顺序添加进去。

分布式快照(Distributed Snapshots)

更重要是时如何在不中断运算的前提下生成快照?其实就是给每一个任务标记一个checkpoint n不同的任务这个n是不同的,相同的任务在不同的算子里面它是相同的。具体我们把这个分解后看看。
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端
【1】如下图,当我们从数据源获取数据的时候,其实我们已经开始有状态了,这个时候我们可以把任务处理的整个过程抽象成如下图中的一张表。
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端
【2】首先是数据源的状态,就是数据在操作前的一个位置offset进行快照存储,如下图所示:
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端
【3】当获取到数据源之后,就进入算子中进行处理,此时就会对数据进入之前的状态进行checkpoint。记录一个savepoint
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端
【4】在最后一次操作前(输出)也会记录checkpoint。在这个过程中,其实前面的算子也在产生不同的 checkpoint n-1 等。如果要进行恢复使用的话,必须是一个complete完整的Checkpoint。只有部分数据的Checkpoint是不能使用的。
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端

状态维护(State Management)

本地维护的这个状态可能非常非常大。后端的管理系统一般使用内存维护这些状态。
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端
Flink提供了两种状态后端:JVM Heap状态后端,适合比较小的状态,量不要很大。当运算子action要读取状态的时候,都是一个Java对象的read或者write。当要产生一个检查点的时候,需要将每个运算子的本地状态数据通过序列化存储在DFS中,
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端
当状态非常大的时候就不能使用JVM Heap的时候,就需要用到RocksDB。当算子需要读取的时候本地state的时候需要进行序列化操作从而节省内存,同时,当需要进行checkpointDFS时,也少了序列化的步骤。它也会给本地存储一份,当fail的时候就可以很快恢复,提高效率。
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端

Event-time 处理

EventTime是事件产生的时间。
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端
下面是一张,程序处理时间与事件发生时间的时间差的一张对比图来更好的理解EventTime
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端

Event-Time 处理

也就是说我们要统计的3-4点之间的数据,程序4点结束这个执行不是根据window时间,而是根据event-Time
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端

Watermarks

Flinkwatermarks实现Event-Time功能的。在Flink里面也属于一个特殊事件,精髓是当某个运算子收到一个带有时间戳twatermark后就不会再收到任何小于该时间戳的事件了。也就是当window需要统计4点的数据时,例如我们每5分钟发一次watermark,那么当window收到4.05watermark的时候才会去统计4点之前的数据(下一次)。如果4.05收到了4点之前的数据的话,Flink1.5会把这个事件输出到旁路输出(side output),你可以获取出来,进行处理。目前有一个问题就是:如果某个Stream Partition 没有输入了,也就没有Watermarks。那么window就没办法进行处理了。当多个数据流的watermarks不相同的时候,Flink会取最小的watermarks进行运算。可以在接收到资源的时候通过代码设置watermarks

OutputTag<String> outputTag = new OutputTag<String>("side-output") {};

Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端

状态保存与迁移(Savenpoints and Job Migration)

可以想成:一个手动产生的检查点(CheckPoint):保存点记录某一个流失应用中的所有运算中的状态。当触发SavePoint之后,Flink提供了两种选择停止消费或者继续运算,根据场景定义。
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端
执行停止之前,产生一个保存点。就可以解决上面提到的3个问题。
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端
从保存点恢复新的执行,这个时候,例如我们重启花了30分钟,这段事件kafka还在不断的接收新的数据。恢复之后,Flink就需要从当时记录的kafka位置赶上最新的位置。这个时候利用Event-Time处理新的数据都是事件发生时的数据,这个时候再跟程序执行的时间比较就更能体现Event-time的价值。
Flink 有状态流式处理,Flink,flink,大数据,服务器,运维,java,后端,前端文章来源地址https://www.toymoban.com/news/detail-758160.html

到了这里,关于Flink 有状态流式处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据Flink(五十):流式计算简介

    文章目录 流式计算简介 一、数据的时效性 二、流式计算和批量计算

    2024年02月15日
    浏览(33)
  • Flink + MySQL 流式计算数据分析

    作者:禅与计算机程序设计艺术 大数据时代,海量的数据源源不断涌入到互联网、移动应用、企业数据库等各个领域,同时这些数据也逐渐成为各种业务场景中的主要输入数据。如何在短时间内对海量数据进行处理、分析并得出有价值的信息,已经成为当今社会越来越关注的

    2024年02月06日
    浏览(38)
  • Flink 系列二 Flink 状态化流处理概述

    本篇作为Flink系列的第二篇,第一篇是环境准备,需要的同学可以看:https://blog.csdn.net/lly576403061/article/details/130358449?spm=1001.2014.3001.5501。希望可以通过系统的学习巩固该方面的知识,丰富自己的技能树。废话不多说咱们开始吧。 在我们的日常生活中数据和数据处理无处不在,

    2024年02月11日
    浏览(27)
  • 兼容流式套接字与数据报 套接字的回射服务器

    实验流程: 1)设计基于select模型的双协议服务器方案 创建套接字:为每种协议创建一个套接字(例如,TCP和UDP)。 绑定套接字:将套接字绑定到指定的端口上。 设置套接字选项:为每个套接字设置相应的选项,例如允许重用地址、设置超时时间等。 监听套接字:对于TCP套

    2024年04月16日
    浏览(36)
  • 【Flink】【ClickHouse】写入流式数据到ClickHouse

    Flink 安装的教程就不在这里赘叙了,可以看一下以前的文章,这篇文章主要是把流式数据写入的OLAP(ClickHouse)中作查询分析 Flink 1.13.2, ClickHouse 22.1.3.7 这里直接使用docker安装,没有安装的同学可以使用homebreak来安装,执行下面的命令即可( 已经安装了docker的可以忽略 ) 四指

    2024年02月03日
    浏览(34)
  • Golang TCP/IP服务器/客户端应用程序,设计一个简单可靠帧传送通信协议。(并且正确处理基于流式控制协议,带来的应用层沾帧[沾包]问题)

    在 Golang 语言标准库之中提供了,对于TCP/IP链接、侦听器的高级封装支持,这易于上层开发人员轻松基于这些BCL(基础类库)实现期望的功能。 TCP/IP链接(客户端) net.Conn 接口 TCP/IP侦听器(服务器) net.Listener Golang 提供了易用的写入数据到远程(对端)实现,而不比像 C/C

    2024年01月24日
    浏览(43)
  • XL-LightHouse 与 Flink 和 ClickHouse 流式大数据统计系统

    一个Flink任务只能并行处理一个或少数几个数据流,而XL-LightHouse一个任务可以并行处理数万个、几十万个数据流; 一个Flink任务只能实现一个或少数几个数据指标,而XL-LightHouse单个任务就能支撑大批量、数以万计的数据指标。 1、XL-LightHouse :  1、再也不需要用 Flink、Spark、

    2024年02月09日
    浏览(26)
  • 【天衍系列 05】Flink集成KafkaSink组件:实现流式数据的可靠传输 & 高效协同

    Flink版本: 本文主要是基于Flink1.14.4 版本 导言: Apache Flink 作为流式处理领域的先锋,为实时数据处理提供了强大而灵活的解决方案。其中,KafkaSink 是 Flink 生态系统中的关键组件之一,扮演着将 Flink 处理的数据可靠地发送到 Kafka 主题的角色。本文将深入探讨 KafkaSink 的工作

    2024年02月20日
    浏览(52)
  • 【状态管理|概述】Flink的状态管理:为什么需要state、怎么保存state、对于state过大怎么处理

    按照数据的划分和扩张方式,Flink中大致分为2类: Keyed States:记录每个Key对应的状态值 因为一个任务的并行度有多少,就会有多少个子任务,当key的范围大于并行度时,就会出现一个subTask上可能包含多个Key(),但不同Task上不会出现相同的Key(解决了shuffle的问题?)   常

    2024年02月01日
    浏览(42)
  • 【大数据】Flink 架构(四):状态管理

    《 Flink 架构 》系列(已完结),共包含以下 6 篇文章: Flink 架构(一):系统架构 Flink 架构(二):数据传输 Flink 架构(三):事件时间处理 Flink 架构(四):状态管理 Flink 架构(五):检查点 Checkpoint(看完即懂) Flink 架构(六):保存点 Savepoint 😊 如果您觉得这篇

    2024年02月19日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包