实时数据的处理一致性如何保证?

实时数据一致性的定义以及面临的挑战

数据一致性通常指的是数据在整个系统或多个系统中保持准确、可靠和同步的状态。在实时数据处理中,一致性包括但不限于数据的准确性、完整性、时效性和顺序性。


下图是典型的实时/流式数据处理的流程:
image

  • 流式数据以各种方式推送到kafka中
  • flink流式数据处理引擎将数据处理
  • 处理完成的数据写入到Mpp数据库

由于整个数据链条是动态变化,因此,实时数据的一致性面临一些挑战。


高并发处理:实时系统需要处理大量并发数据流,增加了一致性维护的难度。主要是在分布式数据库端,如何处理高并发的写入?
网络延迟和故障:网络问题可能导致数据传输中断或延迟,影响数据同步。主要是在数据处理过程中如何保障数据处理的一致性?


实时数据处理系统如何保障一致性

数据源和数据处理之间采用消息队列

缓冲机制:使用消息队列作为缓冲,平衡数据生产者和消费者之间的速度差异。

顺序保证:确保消息按照发送顺序被处理。


Flink引擎在故障下保持数据一致性策略

数据重放(Data Replay)

  • 概念:数据重放是指在发生故障后,系统能够重新处理之前已经处理过的数据,以确保数据的完整性和一致性。
  • 实现:Flink 通过保存输入数据流的快照(snapshots),在发生故障时,可以从快照中恢复数据,并重新处理从故障点之后的数据。

状态恢复(State Recovery)

  • 概念:Flink 作业由多个操作符组成,每个操作符可能有自己的状态(例如,计数器、聚合结果等)。状态恢复是指在故障发生后,能够恢复这些状态到故障前的状态。

  • 实现:Flink 定期对操作符的状态进行快照(checkpointing),并将快照存储在持久化存储中。如果作业失败,Flink 可以从最近的快照中恢复状态,并从故障点继续处理。


通过状态恢复和数据重放,Flink 确保即使在发生故障的情况下,也能保持数据处理的端到端一致性。并且Flink 提供了端到端的精确一次(exactly-once)处理语义,确保每条数据在系统中只被处理一次,即使在故障发生时也是如此。


故障处理流程

  • 故障检测:Flink 监控作业的运行状态,一旦检测到节点故障,立即启动故障恢复流程。
  • 状态恢复:Flink 从最近的快照中恢复作业的状态,包括每个操作符的内部状态。
  • 数据重放:Flink 重新处理从故障点之后的数据,确保所有数据都被正确处理。
  • 作业重启:在状态和数据恢复之后,Flink 重启作业,从故障点继续执行。

Flink引擎在网络延迟下保持数据一致性策略

Flink 引擎解决数据延迟到达的现象主要通过以下几种策略:

  • 时间语义:Flink 支持不同的时间语义(事件时间、处理时间和摄取时间),允许开发者根据业务需求处理数据的时效性问题。

  • 水印机制(Watermarks):Flink 使用水印来处理事件时间的数据流。水印是一种用于表示时间进度的机制,可以告诉 Flink 在特定时间之前的所有事件都已到达,可以进行处理。这允许系统处理乱序事件或延迟到达的数据。

  • 窗口技术:Flink 提供了多种窗口操作,如滚动窗口(tumbling windows)、滑动窗口(sliding windows)和会话窗口(session windows),这些窗口可以对数据进行分组并在指定的时间范围内聚合,从而处理数据到达的延迟。

  • 状态管理:Flink 允许操作符维护状态,即使数据延迟到达,也可以在状态中保留必要的信息,直到数据真正到达时再进行处理。

  • 允许乱序和延迟的 API:Flink 提供了 allowedLateness 参数,允许在窗口操作中指定一定的延迟容忍度,窗口会为延迟数据保留状态,直到延迟数据到达后进行处理。


MPP数据库在高并发情况下保持数据一致性策略

分布式数据库在设计的时候会考虑高并发情况下保持数据一致性的策略,主要有使用事务管理,数据分区分片,数据版本控制,以及采用最终一致性原理。

  • 使用事务管理:MPP数据库一般会提供ACID事务属性,确保事务具有原子性,一致性、隔离性和持久性,另外在分布式系统中支持分布式事务,使用两阶段提交等协议来维护事务一致性。

  • 数据分区分片:将数据分布到不同的分区或分片上,减少单个节点的负载,提高并发处理能力。数据分区分片时采用一致性哈希算法来分配数据到不同的节点,即使在节点增减的情况下也能保持数据分布的一致性。

  • 数据版本控制:当多个事务或操作可能同时对同一数据进行修改时,数据版本控制可以确保数据库的一致性和完整性。另外,数据版本控制可以实现多版本并发控制(MVCC),允许在不锁定资源的情况下执行读取和写入操作,从而提高系统的并发性能。在分布式系统中,不同节点可能会对同一数据产生冲突的更新,版本控制机制可以帮助识别和解决这些冲突。

  • 采用最终一致性模型:大部分分布式数据库采用CAP定理,接受短暂的数据不一致,最终一致性。


在实时数据处理流程中,从技术架构的设计到数据处理引擎的实现,再到分布式数据库在面对高并发、系统故障和网络异常等挑战时确保数据一致性的机制,都需要开发人员在开发和部署阶段进行精心的规划和应用。通过合理利用这些功能,可以有效地维护数据的完整性和一致性。


注:分布式数据库的设计和操作深受CAP定理的影响,该定理指出在分布式系统中,以下三个特性不可能同时得到完全满足:

  • 一致性(Consistency):在分布式系统中的所有数据副本上,对于任何更新操作,都能保证所有节点在同一时间看到最新的数据。

  • 可用性(Availability):每个请求接收到一个响应,无论是成功还是失败的响应。

  • 分区容错性(Partition Tolerance):在网络分区(即系统的一部分被网络故障隔离)发生的情况下,系统仍然能够继续运行。


在CAP定理的框架下,分布式数据库需要在这三个特性之间做出权衡:

  • 强一致性与可用性的权衡:如果一个分布式数据库优先考虑一致性,那么在更新数据时可能需要锁定相关的数据副本,直到所有副本都更新完毕。这可能会降低系统的可用性,因为在更新过程中,其他操作可能需要等待。

  • 最终一致性:在这种模型下,分布式数据库接受在数据更新后的短时间内数据可能不一致,但保证系统最终会达到一个数据一致的状态。这种模型通常通过版本控制、数据版本控制、冲突解决策略等技术实现,允许系统在更新过程中继续处理请求,但返回的数据可能是旧版本。

  • 分区容错性:对于分布式数据库来说,网络分区是一种常见情况,因此数据库需要设计为即使在分区发生时也能继续提供服务。这通常意味着牺牲一定程度的一致性或可用性,例如,通过使用最终一致性模型来保证系统的持续运行。


在实际应用中,分布式数据库可能采用以下策略来实现CAP定理中的权衡:

  • 数据副本和同步策略:选择合适的数据副本数量和同步方式,以平衡一致性和可用性。

  • 读写分离:通过分离读操作和写操作,可以在保持高可用性的同时,通过异步复制机制逐步达到数据一致性。

  • 冲突解决机制:在检测到数据冲突时,使用预定义的策略来解决冲突,如“最后写入胜出”或基于特定业务逻辑的自定义策略。

  • 智能路由和负载均衡:在网络分区发生时,智能地路由请求到可用的节点,并在后台同步数据,以保持系统的可用性和一致性。

  • 使用不同的一致性模型:根据业务需求,选择强一致性、最终一致性或其他一致性模型,以适应不同的应用场景。

最终,分布式数据库的设计者和运维人员需要根据具体的业务需求、系统特点和预期的工作负载来决定如何在CAP定理的三个特性之间做出最佳权衡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/705108.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch学习9:卷积神经网络

文章目录 前言一、说明二、具体实例1.程序说明2.代码示例 总结 前言 介绍卷积神经网络的基本概念及具体实例 一、说明 1.如果一个网络由线性形式串联起来,那么就是一个全连接的网络。 2.全连接会丧失图像的一些空间信息,因为是按照一维结构保存。CNN是…

rtl8723du android5.1 6818 (蓝牙 部分)(第四部分)

系统使用的是,android5.1 , 蓝牙驱动就要使用 V5.6,而不是V5.2 了。 由于 在原来的SDK中 蓝牙使用的是 mt6620 uart 接口。 所以在移植的过程中,顺带把之前的驱动去掉。 1 关于kernel 的修改。 拷贝驱动。 修改Kconfig 修改Makefile 拷贝 uhid dirver 拷贝 uhid.c 拷贝…

无需插件脚本,IDEA配置多服务一键启动

分享本教程的初衷是本人在本地调试时业务场景中需要调用多个服务,并且每次为了找到需要启动的服务花了很多不必要的时间,我相信很多同为开发的小伙伴也有和我一样的困扰。但是学会这招后多个服务需要同时启动时仅需一键即可搞定。接下来让我们一步步设置…

IDEA:开发配置(2024版 建议收藏)

文章目录 一、下载IDEA二、开发配置2.1 Maven仓库2.2 自动导包2.3 字符编码2.4 注释颜色2.6 鼠标滚轮控制代码大小2.7 关闭自动更新2.8 主题、字体和字体大小2.9 关闭usages提示 三、常用插件3.1 chinese(中文汉化)3.2 主题插件3.2.1 One Dark Theme&…

buuctf-findKey

exe文件 运行发现这个窗口,没有任何消息 32位 进入字符串就发现了flag{ 左边红色代表没有F5成功 我们再编译一下(选中红色的全部按p) LRESULT __stdcall sub_401640(HWND hWndParent, UINT Msg, WPARAM wParam, LPARAM lParam) {int v5; // eaxsize_t v6; // eaxDWORD v7; /…

录音转文字怎么弄?用转文字工具让你快速整理会议纪要

端午节活动精彩落幕,紧接着的回顾会议也圆满结束。 在这次会议上,我们收集了许多宝贵意见,但手写记录耗时且易遗漏。为了提高效率,我们急需一款能快速准确转换会议音频为文字的软件。 那么,市面上有哪些录音转文字软…

六西格玛培训都培训哪些内容 ?

天行健六西格玛培训的内容通常涵盖多个方面,旨在帮助学员全面理解和应用六西格玛管理方法。以下是详细的培训内容概述: 一、六西格玛基础知识 引入六西格玛的概念、原理和历史,包括DMAIC(定义、测量、分析、改进、控制&#xff0…

[Python学习篇] Python输入

关键字 input 语法:input("提示信息") 特点 当程序执行到input,等待用户输入,输入完成之后才能继续向下执行。input接收用户输入后,一般存储到变量中,方便使用。input会把接收到的任意用户输入的数据都当做…

数据结构习题(快期末了)

一个数据结构是由一个逻辑结构和这个逻辑结构上的一个基本运算集构成的整体。 从逻辑关系上讲,数据结构主要分为线性结构和非线性结构两类。 数据的存储结构是数据的逻辑结构的存储映像。 数据的物理结构是指数据在计算机内实际的存储形式。 算法是对解题方法和…

(Git)多人协作1

文章目录 前言总结 前言 目标:master分支下file.txt文件新增“aaa”,“bbb” 实现:开发者1新增“aaa”,开发者2新增“bbb” 条件:在同一个分支下协作完成 实际开发过程中,每个用户都与属于自己的码云账户,如果想要进…

C语言----字符函数和字符串函数

在编程的过程中,我们要经常处理字符和字符串,为了方便操作字符和字符串,c语言标准库中提供的一系列库函数,接下来我们就开始学习与认识他们 1.字符分类函数 c语言中有一系列的函数是专门做字符分类的,也就是一个字符…

多模态融合:CLIP

CLIP的全称是Contrastive Language-Image Pre-Training,中文是对比语言-图像预训练,是一个预训练模型,简称为CLIP。CLIP一共有两个模态,一个是文本模态,一个是视觉模态,分别对应了Text Encoder和Image Enco…

资源不是问题,极空间全自动小雅Alist以及Emby全家桶部署教程,同时实现自动更新

资源不是问题,极空间全自动小雅Alist以及Emby全家桶部署教程,同时实现自动更新 哈喽小伙伴,我是Stark-C~ 在上次更新了极空间虚拟机教程之后,终于有小伙伴催更了小雅Alist的搭建方案。作为当前市面最强、最大、最全的影视资源合…

MySQL-----排序 GROUP BY

在我们对数据进行分析的时候,通常会根据一个或多个列对结果集进行分组,从而得到我们想要的结果。例如:统计考某一门课程的学生信息等。 而MySQL的GROUP BY 语句根据一个或多个列对结果集进行分组。同时,我们也可以使用 COUNT, SUM…

Kubernetes 集群架构

etcd 集群状态存储:etcd 存储所有 Kubernetes 对象的状态,例如部署、pod、服务、配置映射和机密。配置管理:集群配置的更改存储在 etcd 中,允许 Kubernetes 管理和维护集群的所需状态。 注意:etcd 可能位于 kube-syst…

GBDT算法超参数评估

GBDT(Gradient Boosting Decision Tree)算法是一种强大的机器学习技术,广泛应用于分类、回归等任务。然而,为了充分发挥其性能,超参数的合理设置至关重要。超参数,如学习率、树的最大深度、子样本比例等&am…

尝试使用blazor(二)Blazor WebAssembly(WASM)与Server之间有什么区别?

要使用Blazor,你得先选择一种模式,因为它有两种模式。Blazor网络框架允许将Razor组件以不同的方式托管。它们可以在ASP.NET Core(Blazor Server)中在服务器端运行,也可以在基于WebAssembly的.NET运行时在浏览器中在客户…

便捷生活,从便民平台开始

想要生活更轻松、更便捷吗?那就来试试我们的便民平台吧!生活中的琐事总是让人头疼不已,但有了我们的便民平台,一切问题都迎刃而解! 咸阳便民平台的张总说:无论您是需要家政服务、维修安装,还是寻…

支持微信支付宝账单,极空间Docker部署一个开箱即用的私人账本『cashbook』

支持微信支付宝账单,Docker部署一个开箱即用的私人账本『cashbook』 哈喽小伙伴好,我是Stark-C~ 不知道屏幕前的各位富哥富姐们有没有请一个专业的私人财务助理管理自己的巨额资产,我不是给大家炫耀,我在月薪300的时候就已经有了…

ICC2:如何获取get_xx -filter后可用的属性有哪些?

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 report_attribute -app -class cell $instname 这种直接告诉你指定cell有哪些属性,以及对应的值是什么 或者直接用list_attribute也可以 list_attribute -help可以…