干货 | 实时数据聚合怎么破

数据汇聚 数据汇聚:打破企业数据的物理孤岛,形成统一的数据中心,为后续数据资产的价值挖掘提供原始材料。 1.数据汇聚工具: 1.Canal 主要缺点:Server中的Instance(实例)和Client(客户机)之间是一对一消费,不太适合用于多消费和数据分发的场景。 2.Sqoop 处理过程定制程度较高,主要通过在命令行中配置参数来调整数据同步操作行为,在用户的一些自定义逻辑和数据同步链路监控方面比较薄弱。并且任务运行完全依赖于MapReduce,功能扩展性方面受到明显的约束和限制。 3.DataX . 阅读详情

作者简介

 

数据猩猩,携程数据分析总监,关注分布式数据存储和实时数据分析。

实时数据分析一直是个热门话题,需要实时数据分析的场景也越来越多,如金融支付中的风控,基础运维中的监控告警,实时大盘之外,AI模型也需要消费更为实时的聚合结果来达到很好的预测效果。

实时数据分析如果讲的更加具体些,基本上会牵涉到数据聚合分析。

数据聚合分析在实时场景下,面临的新问题是什么,要解决的很好,大致有哪些方面的思路和框架可供使用,本文尝试做一下分析和厘清。

在实时数据分析场景下,最大的制约因素是时间,时间一变动,所要处理的源头数据会发生改变,处理的结果自然也会因此而不同。在此背景下,引申出来的三大子问题就是:

  • 通过何种机制观察到变化的数据 

  • 通过何种方式能最有效的处理变化数据,将结果并入到原先的聚合分析结果中

  • 分析后的数据如何让使用方及时感知并获取

可以说,数据新鲜性和处理及时性是实时数据处理中的一对基本矛盾。

另外实时是一个相对的概念,在不同场景下对应的时延也差异很大,借用Uber给出的定义,大体来区分一下实时处理所能接受的时延范围。

一、数据新鲜性

为简单起见,把数据分成两大类,一类是关键的交易性数据,以存储在关系型数据库为主,另一类是日志型数据,以存储在日志型消息队列(如kafka)为主。

第二类数据,消费端到感知到最新的变化数据,采用内嵌的pull机制,比较容易实现,同时日志类数据,绝大部分是append-only,不涉及到删改,无论是采用ClickHouse还是使用TimeScaleDB都可以达到很好的实时聚合效果,这里就不再赘述。

针对第一类存储在数据库中的数据,要想实时感知到变化的数据(这里的变化包含有增/删/改三种操作类型),有两种打法。

打法一:基于时间戳方式的数据同步,假设在表设计时,每张表中都有datachange_lasttime字段表示最近一次操作发生的时间,同步程序会定期扫描目标表,把datachange_lasttime不小于上次同步时间的数据拉出进行同步。

这种处理方式的主要缺点是无法感知到数据删除操作,为了规避这个不足,可以采用逻辑删除的表设计方式。数据删除并不是采取物理删除,只是修改表示数据已经删除的列中的值标记为删除或无效。使用这种方法虽然让同步程序可以感知到删除操作,但额外的成本是让应用程序在删除和查询时,操作语句和逻辑都变得复杂,降低了数据库的可维护性。

打法一的变种是基于触发器方式,把变化过的数据推送给同步程序。这种方式的成本,一方面是需要设计实现触发器,另一方面是了降低了insert/update/delete操作的性能, 提升了时延,降低了吞吐量。

打法二:基于CDC(Change Data Capture)的方式进行增量数据同步,这种方式对数据库设计的侵入性最小,性能影响也最低,同时可以获得丰富的开源组件支持,如Cannal对MySQL有很好支持,Debezium对PostgreSQL有支持。利用这些同步组件,把变化数据写入到Kafka,然后供后续实时数据分析进一步处理。

二、数据关联

新鲜数据在获取到之后,第一步常见操作是进行数据补全(Data Enrichment), 数据补全自然涉及到多表之间的关联。这里有一个痛点,要关联的数据并不一定也会在增量数据中,如机票订单数据状态发生变化,要找到变化过订单涉及到的航段信息。由于订单信息和航段信息是两张不同的表维护,如果只是拿增量数据进行关联,那么有可能找不到航段信息。这是一个典型的实时数据和历史数据关联的例子。

解决实时数据和历史数据关联一种非常容易想到的思路就是当实时数据到达的时候,去和数据库中的历史数据进行关联,这种做法一是加大了数据库的访问,导致数据库负担增加,另一方面是关联的时延会大大加长。为了让历史数据迅速可达,自然想到添加缓存,缓存的引入固然可以减少关联处理时延,但容易引起缓存数据和数据库中的数据不一致问题,另外缓存容量不易估算,成本增加。

有没有别的套路可以尝试?这个必须要有。

可以在数据库侧先把数据进行补全,利用行转列的方式,形成一张宽表,实现数据自完备,宽表的变化内容,利用CDC机制,让外界实时感知。

三、计算及时性

在解决好数据变化实时感知和数据完备两个问题之后,进入最关键一环,数据聚合分析。为了达到结果准确和处理及时之间的平衡,有两大解决方法:一为全量,一为增量。

3.1 全量计算(1m<时延<5m)

全量计算以时间代价,对变化过的数据进行全量分析,分析结果有最高的准确性和可靠性。成本是花费较长的计算时间和消耗较多的计算资源。可以使用的分析引擎或计算框架有 Apache Spark 和 Apache Flink。

全量数据容量一般会比较大,为了节约存储,同时为了方便数据过滤和减少不必要的网络传输,大多会使用列式存储, 列式存储使用较多的当属Parquet和ORC。

列式存储最大的不足是无法进行删/改操作,为了支持删改,一般会把列式存储和行式存储相结合。最近时间内变化的数据采用行式存储如avro格式,然后定期合并成列式存储。非常成功和红火的Apache Hudi和Delta IO就是基于这种思路。

3.2 增量计算

假设当前处理的时间窗口中有10万条记录,因为其中不到100条的记录发生变化,而对所有记录的聚合指标进行计算重演,显然不是非常合理,那么有没有可能只对增量数据导致的变化聚合指标进行重算。答案是肯定的,或者说在部分场景下,是可以实现的。

让我们把增量计算分成几种不同情况:

1)增量数据会添加新的聚合记录,对原有计算结果无影响 

2)增量数据会添加新的聚合记录,并导致原有计算结果部分失效 

3)增量数据不添加新的聚合记录,但导致原有计算结果全部失效

第1、2两种情况下,增量计算会带来实时性上的收益,第三种不会,因为所有指标均被破坏,都需要重演,已经褪化成全量计算。

增量处理模型除了Apache Flink之外,非常著名的还有Microsoft提出的Naiad模型,后者更为高效。由于后者只提供了非常底层的调用API,在生态建设方面远不如Apache Flink,但其思想深刻影响了TensorFlow等框架的设计和实现,等有时间再详细介绍一下Naiad。

上面讨论的全量也好,增量也罢,都是把数据从数据库拉出来再进行计算,那么有没有可能在数据库内部实现增量计算的可能?

Oracle在12.x版本中提供物理视图(materialized view)的自动刷新机制,这意味着用户可以把实时聚合逻辑定义在物理视图中,然后每当有数据更新,视图会被自动更新。既然Oracle有,那么在开源的世界里一定会有对应的东西出现,最起码会有相应的影子在浮现,这个影子就是PostgreSQL IVM。

PostgreSQL IVM使用到Transition Table这个概念,在触发器中,用户可以看到变化前和变化后的数据,从而计算出变更的内容,利用这些Delta数据,进行刷新预先定义好的物理视图。

四、计算触发机制

  • 定时触发

  • trigger for every new element

计算成本比较

五、聚合结果实时可见

聚合结果的存储要支持upsert语义,聚合结果的消费者实时感知到,同时聚合结果的存储要有水平可扩性。结合这三个要求,比较推荐使用NoSQL来进行指标的存储,具体可以使用MongoDB。

六、小结

本文尝试对实时数据聚合分析中涉及到的问题和常见思路进行梳理,文中定有不少疏漏,不足之处希望读者批评指正。

【推荐阅读】

 “携程技术”公众号

  分享,交流,成长

【虹科干货】谈谈Redis Enterprise的实时搜索 通过实时索引、查询和全文搜索引擎,Redis Enterprise提供了更好的数据检索解决方案。通过强大的搜索引擎助力,Redis Enterprise能在亚毫秒级的时间内提供结果,以增强客户体验并助力商业智能。 阅读详情

相关推荐

为什么会出现grafana仪表盘的数据和jmeter聚合报告指标对不上的情况,如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 846

pg_ivm: PostgreSQL 实时数据 IVM 特性增强

pg_ivm: PostgreSQL 实时数据 IVM 特性增强 pg_ivm 是一个针对 PostgreSQL 数据库的实时数据 In-Place Version Management (IVM) 功能的增强插件。 项目简介 pg_ivm 是一个开源项目,旨在为 PostgreSQL 提供高效的实时数据版本管理功能。该项目由 SRA OSS, Inc. 开发并维护,并在 GitCode 上开源。...

gitblog_00010的博客 647

基于数据转换的智能媒体内容聚合系统设计与实现

适合新闻、论文等强调事实保真的场景。基于 BERT 的句子嵌入 + 相似度图排序:原理类似 PageRank:谁链接多,谁就越重要。只不过这里的“链接”是语义相似度。用 T5 模型生成全新句子:虽然更自然流畅,但也容易“幻觉”——编造不存在的事实。所以在严肃场景慎用!graph TDA[原始文本] --> B{是否强调忠实原文?B -- 是 --> C[抽取式摘要]B -- 否 --> D[生成式摘要]C --> E[句子编码 → 相似度图 → 排序筛选]

weixin_34718952的博客 647

日志聚合与分析

日志聚合与分析 在程序中正确的地方输出合适的日志消息,只是合理使用日志的第一步。日志记录的真正作用在于当有问题发生时,能够帮助开发人员很快的定位问题所在。不过一个实用的系统通常由很多个不同的部分组成。这其中包括所开发的程序本身,也包括所依赖的第三方应用程序。以一个典型的电子商务网站为例,除了程序本身,还包括所依赖的底层操作系统、应用服务器、数据库、HTTP 服务器和代理服务器和缓存等。当一个问题

nobody 7469

PCIE6.0协议学习小记-Flit_Mode

PCIE6.0学习

code_aJack的博客 4633

iOS面试题大全(附带答案)

C语言相关面试题 1.static有什么用途? 答案:在C语言中,static主要定义全局静态变量,定义局部静态变量,定义静态函数。 static 属于静态变量,使用它修饰的变量生命周期是整个源程序。 @1.在函数体内的 static 变量的作用范围为该函数体,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值; @2.在模块内的 static 全局变量可以被模块内所有函数访问,但不能被模块外其它函数访问; @3.在模块内的 static 函数只被这一模块内的其它函数调用,这个函数的使用范围被限

IOSNF的博客 2425

Druid (大数据实时统计分析数据存储)

原文见此 : Druid White PaperDruid 是一个为在大数据集之上做实时统计分析而设计的开源数据存储。这个系统集合了一个面向列存储的层,一个分布式、shared-nothing的架构,和一个高级的索引结构,来达成在秒级以内对十亿行级别的表进行任意的探索分析。在这篇论文里面,我们会描述Druid的架构,和怎样支持快速聚合、灵活的过滤、和低延迟数据导入的一些细节。1. 介绍在最近几年,

白乔专栏 2万+

SystemVerilog从入门到实战

SystemVerilog复合数据类型概述 SystemVerilog增强了Verilog的数据建模能力,提供多种复合数据类型: 数组类型:包括定宽数组(固定大小)、动态数组(运行时分配)和多维数组,支持高效索引访问。 队列:结合数组和链表特性,支持两端快速插入/删除操作,提供push/pop等方法。 关联数组:键值对存储结构,支持稀疏数据存储和快速查找,提供exists/delete等方法。 结构体:组合不同类型数据成员,支持打包(packed)形式以优化存储空间。 枚举类型:为数值赋予语义名称,支持状态

2301_79143213的博客 1225

字符串离散化+数据合并(join&merge)+数据分组聚合(groupby)+索引(行索引index+列索引set_index+复合索引[series和dataframe])

整体框架 目录 整体框架 一、字符串离散化——one-hot特征工程 二、合并 通过join按照index进行合并 通过merge按照列进行合并 1、内连接 2、外连接,取并集 3、以左边的数组为标准 4、以右边的数组为标准 三、分组聚合 四、关于索引 1、行索引通过index查看,也可以通过index直接更改索引值 2、reindex重新定义行索引 3、以列为索引set_index 4、unique对索引值去重 5、复合索引 series数据类型的复合索引...

weixin_51589123的博客 2631

【示波器专题】示波器探头的原理深入——有源探头之差分有源探头

差分有源探头是一种特殊的有源探头,与普通单端有源探头的区别在于其前端的放大器是差分放大器。差分放大器的好处是可以直接测试高速差分信号,同时其共模抑制比高,对共模噪声的抑制能力比较好。...

一点硬件 2624

基于matlab的CNN验证码识别系统(UI界面版)

基于matlab的CNN验证码识别系统(UI界面版),CNN验证码识别系统包括数据集处理、模型搭建、模型训练、界面设计与实现

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 481

干货 | 小米A/B实验场景查询提速:数据预聚合方案

“本期技术干货,我们邀请到了小米集团大数据工程师乐涛,和大家分享基于Apache Doris的小米A/B实验场景查询提速实践。”一、业务背景A/B实验是互联网场景中对比策略优劣的重要手段。为了验证一个新策略的效果,需要准备原策略A和新策略B两种方案。随后在总体用户中取出一小部分,将这部分用户完全随机地分在两个组中,使两组用户在统计角度无差别。将原策略A和新策略B分别展示给不同的用户组,一段时间后,...

小米云技术 786

2️⃣ Coze创建智能体教学(2025年全新版本)

扣子平台提供强大支持,可将智能体轻松集成至各类社交平台,使智能体得以服务更为庞大的用户群体。当下支持集成的平台如下:​1️⃣豆包:作为聚焦 AI 内容创作的平台,非常适合发布充满创意、娱乐性强的智能体。​2️⃣飞书:适合发布用于办公协作的智能体,助力团队提升工作效率。​3️⃣微信:借助公众号或小程序的形式,能够服务海量微信用户。​4️⃣抖音:适合发布与短视频相关的智能体,为用户提供创意与娱乐服务。​

李同学Lino的博客 4574

mongodb 分组聚合_MongoDB干货总结

什么是MongoDB基于分布式文件存储的数据库,介于非关系型和关系型数据库之间。MongoDB和MySQL对比MongoDB有什么特点(1)面向集合存储数据,数据以json格式存储;(2)查询功能强大,几乎可以实现所有关系型数据库的单表查询功能;(3)自带分布式文件系统,方便集群部署;(4)自带了对map-reduce运算框架的支持。MongoDB为什么快(1)没有事务约束;(2)使用的内存映射技...

weixin_33420201的博客 2398

2026年经纬恒润嵌入式笔试试卷带答案

2026年经纬恒润嵌入式笔试试卷涵盖车规MCU选型(如TriCore)、Cortex-M启动流程、指针数组区别、AUTOSAR OS任务调度(静态优先级抢占)、CAN总线特性(终端电阻必要性)、PID控制原理、SOME/IP协议应用等核心知识点。试题聚焦汽车电子系统设计,强调功能安全与实时性要求,涵盖中断处理、Bootloader升级机制、内存布局及可靠性设计(如看门狗、ECC校验)。多选题考察通信协议分层应用,填空题强化基础概念(如MSP初始值、SOME/IP、积分项作用)。整体体现车载嵌入式开发对底层原

Open 76

【Claude Code 源码解析教程】第25章:测试与调试

Claude Code 作为复杂的 AI 编程助手,测试与调试是保证质量的关键环节。项目建立了完善的测试体系,包括单元测试、集成测试、端到端测试等多个层次,同时提供了丰富的调试工具和技巧。

rengang66的博客 210

干货 | 携程酒店实时数仓架构和案例

作者简介秋石,携程数据仓库专家,关注大数据、数据仓库、数据治理等领域;九号,携程数据技术专家,关注数据仓库架构、数据湖、数据治理;魁伟,携程资深数据工程师,关注实时&离线大数据产品及技术。一、实时数仓当前,企业对于数据实时性的需求越来越迫切,因此需要实时数仓来满足这些需求。传统的离线数仓的数据时效性通常为 T+1,并且调度频率以天为单位,无法支持实时场景的数据需求。即使将调度频率设置为每小...

携程技术 4485

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

如何用 Redis OM Spring 聚合分析实现实时数据统计:GroupBy + Reducer 完整实战指南

Redis OM Spring 聚合分析是构建实时数据统计报表的利器。作为 Spring Data Redis 的高效扩展,Redis OM Spring 允许开发者直接在 Redis 服务端完成分组、求和、平均等统计运算,无需把海量数据拉到应用内存里处理。本文将带你从零上手,用 `@Aggregation`、`@GroupBy` 与 `@Reducer` 三个注解,快速实现电商场景下的实时销售统

gitblog_01105的博客 185

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Elasticsearch Transform聚合预处理:原理、实践与案例解析

本文介绍了Elasticsearch Transform(ES Transform)的核心概念、工作原理及典型应用场景。ES Transform是Elasticsearch内置的数据聚合预处理组件,通过预定义聚合规则将原始数据转化为结构化汇总数据并存储到新索引中,可显著降低查询压力并优化存储效率。其工作流程分为定义转换规则、初始数据处理和增量数据同步三个阶段,支持时间窗口、分组统计等多种聚合方式。

没事学AI的博客 1019

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

干货|从 ClickHouse 到 ByteHouse:实时数据分析场景下的优化实践

作为国内规模最大的 ClickHouse 用户,目前字节跳动内部的 ClickHouse 节点总数超过 1.8W 个。综合来说,字节跳动广泛的业务增长分析很多都建立在 ClickHouse 为基础的查询引擎上。2021年8月,火山引擎基于字节跳动内部最佳实践,正式推出ByteHouse企业版,解决了开源技术上手难、试错成本高等企业数字化转型中遇到的技术痛点。在打造ByteHouse的路程中,我们经...

芋艿V 637

腾讯看点基于 Flink 构建万亿数据量下的实时数仓及实时查询系统

▼ 关注「Flink 中文社区」,获取更多技术干货▼摘要:本文由社区志愿者路培杰整理,腾讯看点数据团队高级工程师王展雄在 Flink Forward Asia 2020 分享的议题《腾讯...

Ververica的博客 1136

数仓 调度_干货知识贴:基于Flink构建实时数仓

01数据仓库的趋势数据仓库的建设是“数据智能建设”、“数字化”转型的一个必要且基础的环节;从智能商业的角度来讲,数据的结果代表了用户的反馈,获取结果的及时性就显得尤为重要,快速的获取数据反馈能够帮助公司更快的做出决策,更好的进行产品迭代,实时数仓在这一过程中起到了不可替代的作用。随着数据时效性在企业运营中的重要性日益凸现,例如,实时推荐、精准营销、实时风控、实时监控大屏、实时BI报表等,...

weixin_39533280的博客 523

Elasticsearch如何进行实时用户行为分析?

Elasticsearch的聚合功能可以对用户行为数据进行实时的统计和分析,如计算平均值、最大值、最小值等统计指标,帮助了解用户行为模式。通过上述方法,Elasticsearch能够有效地支持实时用户行为分析,帮助企业及时响应市场变化,优化产品和服务,提高业务决策的效率和准确性。: 以电商为例,Elasticsearch可以分析用户在购物流程中的行为,如浏览商品、加入购物车、结算等,帮助企业优化购物体验,提高转化率。

借雨醉东风的博客 593

Elasticsearch聚合实战:用员工薪资数据手把手教你玩转Bucket/Metric/Pipeline

本文通过一个虚构的员工薪资数据集,手把手教你掌握Elasticsearch的聚合操作。从基础的Bucket和Metric聚合,到高阶的Pipeline聚合,文章提供了完整的DSL模板和实战案例,帮助你快速构建薪酬结构分析、岗位薪资对比等复杂数据分析,并分享了性能调优与生产实践指南。

weixin_29285605的博客 449

KES 数据同步与ETL实战:数据集成、转换与实时同步方案

KES 数据同步与ETL实战:数据集成、转换与实时同步方案

wei_shuo的博客 1万+
上一篇: 干货 | 多业务线亿级体量,携程是怎么做账务中台的
下一篇: 干货 | 百万QPS,秒级延迟,携程基于实时流的大数据基础层建设
携程技术
博客等级 码龄10年 3716粉丝 324原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值