什么是批处理技术
批处理技术是一种针对有限数据进行离线处理的方式。它能够对大量数据进行高效处理与分析,尤其适用于对历史数据进行采集、分析和挖掘的场景。例如,离线数仓、批量报表以及离线推荐等应用,都是基于批处理技术实现的,批处理技术具有以下特点:
优点:
- 处理复杂度低:通常无需考虑数据的顺序、时间窗口等因素。
- 容错性高:数据以多批次集中处理,一条数据的失败一般不会影响后续数据的处理。同时,可采用多种容错机制确保任务顺利完成。
缺点:
- 响应速度慢:由于批处理是周期性执行的,无法及时响应数据变化。
- 处理结果滞后:周期性执行的特点可能导致在某些场景下出现数据结果滞后的情况。
常见的批处理技术有以下几种:
- Apache Spark:Spark是一个统一的引擎,支持批处理、流处理、交互式查询、机器学习等多种常见的数据处理场景。其核心引擎基于批处理概念,但同时也提供了流计算解决方案——Spark Streaming。该方案采用微批处理(Micro-Batch Processing)方式,将数据流分割成一系列小批量数据,每个小批量数据在单独的批次中处理,从而近似实现流处理。
- Hadoop MapReduce:这是一个基于Apache Hadoop的分布式编程模型和软件框架,用于在大规模集群上并行处理数据。它主要由Map任务和Reduce任务两个核心组件构成,分别负责处理数据和聚合结果。
- Datax:DataX是一款非常实用的数据同步工具,特别适合离线处理有限的大规模数据同步场景。
什么是流处理技术
流处理技术是一种对无限数据进行实时处理的方式,数据以流的形式不断产生和处理。流处理能够快速响应数据变化,及时进行数据处理和分析,适用于需要实时处理数据的场景。例如,实时数仓、实时监控、实时推荐等应用都采用了流处理技术,流处理技术具有以下特点:
优点:
- 实时性:数据在产生时即被处理,能够及时反馈结果。
- 高效性:能够不间断接收新数据并进行处理,从而更高效地利用硬件资源。
缺点:
- 数据突发性:流式数据具有不可预测性,可能会出现突发高峰,导致系统压力急剧增加。
- 处理复杂度高:实时处理可能需要更高的处理能力和更复杂的算法。
常见的流处理技术有以下几种:
- Apache Flink:由Apache软件基金会开发的开源流处理框架,采用Java和Scala编写。Flink以数据并行和流水线方式执行任意流数据程序,支持批处理和流处理程序,运行时本身也支持迭代算法的执行。Flink凭借其强大的实时计算能力、精确一次的状态一致性保证以及友好的编程模型,在众多流处理框架中脱颖而出。
- Apache Storm:一个功能强大的实时大数据处理框架,用于解决实时数据处理问题。通过深入了解和使用Storm,可以更好地应对实时数据处理的挑战,实现更高效、更准确的数据分析和处理。Storm在实时大数据处理领域占据重要地位,能够可靠地处理庞大的数据流。
- Apache Spark Streaming:利用Apache Spark技术栈进行实时数据流分析,并通过可视化技术实时展示分析结果。Spark Streaming结合常见的数据处理和可视化库,实现实时的数据流分析和可视化展示。然而,Spark Streaming被认为是“微批拟流”,并非真正的流处理。
流批一体技术的演进
Lambda架构
Lambda架构的逻辑是,流任务与批任务读取相同的数据源,实时计算结果由流任务产出;批任务通常按天执行,计算T-1的数据,并将结果写入结果表。最终,数据应用根据自身需求合并两个结果表的结果。其核心思路是将业务进行拆分,实时性要求高的业务采用实时计算方案,实时性要求低的业务采用离线计算方案,最后由数据服务层对全部数据进行分析汇总,供下游使用。虽然Lambda架构能够通过流任务保证结果的实时性,同时通过批任务保证结果的最终一致性,但它也存在几个明显的缺点:
- 一种逻辑需要编写两套代码,开发成本高,且数据不一致的风险也较高。
- 两套架构各自独立,组件多,链路冗余。
- 数据散布在多个系统中,互相访问困难,数据治理也面临挑战。
Kappa架构
与Lambda架构不同,Kappa架构只保留了流处理层,完全舍弃了批处理层。其中一个流处理层正常运行,数据应用读取其输出;当数据出现错误或业务逻辑发生变更时,启动另一个流处理层,利用消息队列的重播机制,重新消费先前的数据并输出到另一个结果表中。当确定可以替换线上表时,完成替换。 当然,在实际生产中,这个过程会复杂得多。而且受限于消息队列数据生命周期的限制,这种架构在生产中的应用较少。 不过,Kappa架构的另一贡献是启发了人们思考用单一系统实现曾经需要两套系统才能实现的需求。人们开始思考:为什么流式计算引擎不能提供结果的准确性?是哪个环节出了问题?如果流处理能够保证结果准确性,是否意味着重启流任务的需求会大大降低,Kappa架构是否能够彻底取代Lambda架构?流处理引擎是否可以实现与批处理引擎等价的语义?
流批一体架构
流批一体是指将流式处理和批处理统一在一个运行时框架中,进行一体化处理。流批一体技术解决了原Lambda架构中需要开发两套代码、维护两套系统、计算逻辑口径不一致的问题。用户只需编写一套代码,即可同时用于实时计算和离线计算,大大降低了学习成本和开发成本。同时,使用统一的计算引擎和代码,能够更好地保证数据的一致性。
应用场景
在实际生产过程中,大量数据不断产生,例如金融交易数据、互联网订单数据、GPS定位数据、传感器信号、移动终端产生的数据、通信信号数据等,以及我们熟悉的网络流量监控、服务器产生的日志数据。这些数据的最大共同点是实时从不同的数据源中产生,然后传输到下游的分析系统。针对这些数据类型,主要包括实时智能推荐、复杂事件处理、实时欺诈检测、实时数仓与ETL类型、流数据分析类型、实时报表类型等实时业务场景,而Flink对这些类型的场景都有着非常好的支持。
- 实时智能推荐 智能推荐系统会根据用户的历史购买行为,通过推荐算法训练模型,预测用户未来可能购买的物品。对个人而言,推荐系统起到信息过滤的作用;对Web/App服务端而言,推荐系统能够满足用户的个性化需求,提升用户满意度。随着推荐系统的飞速发展,除了算法不断完善,对时延的要求也越来越苛刻和实时化。利用Flink流计算,可以帮助用户构建更加实时的智能推荐系统,对用户行为指标进行实时计算,对模型进行实时更新,对用户指标进行实时预测,并将预测信息推送给Web/App端,帮助用户获取想要的商品信息,同时也帮助企业提升销售额,创造更大的商业价值。
- 复杂事件处理 复杂事件处理在工业领域较为常见,例如对车载传感器、机械设备等进行实时故障检测。这些业务类型通常数据量巨大,且对数据处理的时效性要求极高。通过利用Flink提供的CEP(复杂事件处理)功能进行事件模式的抽取,同时应用Flink的SQL进行事件数据的转换,可以在流式系统中构建实时规则引擎。一旦事件触发报警规则,便立即将告警结果传输至下游通知系统,从而实现对设备故障的快速预警监测和车辆状态监控等目的。
- 实时欺诈检测 在金融业务中,常常出现各种类型的欺诈行为,如信用卡欺诈、信贷申请欺诈等。如何保障用户和公司的资金安全,是近年来许多金融公司和银行共同面临的挑战。随着不法分子欺诈手段的不断升级,传统的反欺诈手段已不足以解决当前面临的问题。以往可能需要几个小时才能通过交易数据计算出用户的行为指标,然后通过规则判别出具有欺诈行为嫌疑的用户,再进行案件调查处理。在这种情况下,资金可能早已被不法分子转移,给企业和用户造成大量经济损失。而运用Flink流式计算技术,能够在毫秒内完成对欺诈判断行为指标的计算,然后实时对交易流水进行规则判断或模型预测。一旦检测出交易中存在欺诈嫌疑,便直接对交易进行实时拦截,避免因处理不及时而导致的经济损失。
- 实时数仓与ETL 结合离线数仓,利用流计算的诸多优势和SQL灵活的加工能力,对流式数据进行实时清洗、归并和结构化处理,为离线数仓进行补充和优化。另一方面,结合实时数据ETL处理能力,利用有状态流式计算技术,可以尽可能降低企业在离线数据计算过程中调度逻辑的复杂度,高效快速地处理企业需要的统计结果,帮助企业更好地应用实时数据分析出来的结果。
- 流数据分析 实时计算各类数据指标,并利用实时结果及时调整在线系统相关策略,在各类内容投放、无线智能推送领域有大量应用。流式计算技术将数据分析场景实时化,帮助企业实时分析Web应用或App应用的各项指标,包括App版本分布情况、Crash检测和分布等,同时提供多维度用户行为分析,支持日志自主分析,助力开发者实现基于大数据技术的精细化运营,提升产品质量和体验,增强用户黏性。
- 实时报表分析 实时报表分析是近年来许多公司采用的报表统计方案之一,其中最主要的应用是实时大屏展示。利用流式计算实时得出的结果直接推送到前端应用,实时显示重要指标的变化情况。最典型的案例是淘宝的双十一活动,每年双十一购物节,除疯狂购物外,最引人注目的就是天猫双十一大屏不停跳跃的成交总额。在整个计算链路中,包括从天猫交易下单购买到数据采集、数据计算、数据校验,最终落到双十一大屏上展现的全链路时间压缩在5秒以内,顶峰计算性能高达数十万笔订单/秒,通过多条链路流计算备份确保万无一失。在其他行业,企业也在构建自己的实时报表系统,让企业能够依托自身业务数据,快速提取更多数据价值,从而更好地服务于企业运行。