初探大数据流式处理
大数据处理系统主要分为批式处理和流式处理两类。批式处理将大量数据分成批次进行处理,适用于对实时性要求不高的场景,如离线数据分析和大规模数据计算,常见的框架包括MapReduce、Hive和Spark。流式处理则是一种实时数据处理方式,能够逐条或按小批次处理数据,适用于需要低延迟和高实时性的场景,如实时监控和即时分析,常见的框架包括Spark Streaming、Flink和Storm。
批式处理系统特点
- 数据批量处理:将某时间段的数据汇聚成一个批次,进行业务逻辑处理后加载至存储系统。
- 查询延迟性:虽然可对完整大数据集实现高效查询,但无法查询到最新的实时数据,存在一定的数据延迟。
- 处理时间长:处理数据一般计算时间较长,可能几分钟、几小时甚至几天。
流式处理系统特点
- 实时处理与低延迟:流式大数据处理系统能够实时处理逐条或多条数据,并将数据加载到高性能内存中进行计算,同时支持数据的持久化,确保低延迟的数据处理。
- 数据到达的不确定性:流式计算无法预先确定数据的到达时间和顺序,使得数据处理过程具有不确定性。
- 网络延迟的影响:在实时流计算中,由于网络延迟,来自不同节点的数据可能不会按照发送顺序被处理,可能导致数据处理顺序的混乱。
大批次计算
- 大批次计算时间:通常以小时、天、周、月、年作为时间间隔,因此也被称为离线计算。
- 典型的计算框架:包括MapReduce、Hive、SparkCore、SparkSQL等。
微批次计算
适用场景
- 批量计算适用场景:适合对实时性要求不高,但对数据的准确性和全面性更为重要的应用场景。通常采用先存储后计算的方式。
- 流式计算适用场景:适合无需先存储、可以直接进行数据计算,且对实时性要求严格,但对数据精确度要求稍微宽松的应用场景。
- 流批一体计算适用场景:流量计算和批量计算具有明显的优劣互补特征。在多种应用场合下,可以通过结合流式计算的实时性优势和批量计算的计算精度优势,满足不同阶段的数据计算要求。
流式计算的应用场景
- 计算结果精度问题:大数据流式计算主要用于对动态产生的数据进行实时计算并及时反馈结果,但通常不要求结果绝对精确。
- 计算时机问题:在数据的有效时间内获取其价值是大数据流式计算系统的首要设计目标。当数据到来后,系统会立即对其进行计算或对一小段时间间隔的数据进行计算,而不会等待后续全部数据到来再进行计算。
流式大数据的特征
- 实时性:流式大数据要求数据在产生后能够被即时处理和分析,以确保结果的时效性。
- 易失性:流式数据往往具有短暂的生命周期,如果不能及时处理,数据可能会丢失或失效。
- 突发性:流式数据的产生速率可能会突然增加,形成数据洪峰。
- 无序性:流式数据在传输过程中可能会因为网络延迟等原因而乱序到达。
- 无限性:流式数据是持续不断产生的,没有明确的结束点。
流式计算的关键技术
- 系统架构:包括有中心节点的主从式架构和无中心节点的对称式系统架构。
- 数据传输:包括主动推送方式和被动拉取方式。
- 编程接口:方便用户根据流式计算的任务特征,通过有向任务图来描述任务内在逻辑和依赖关系,并编程实现任务图中各节点的处理功能。
- 高可用技术:包括被动等待策略和主动等待策略。
- 时间窗口动态数据处理:实时系统需要提供对动态数据的实时处理方法,以快速响应来自业务系统的即席查询请求。
流式处理框架的特征
- 强实时处理:流式处理需要确保数据的实时计算,同时也需要确保处理结果的实时发送。
- 高容错能力:由于数据很容易丢失,这就需要系统具有一定的容错能力。
- 动态变化:一般采用流式处理架构的应用场景都存在数据速率不固定的情况。
- 多数据源:由于可能存在很多的数据源,而且各数据源、数据流之间又可能是相互独立的。
- 数据时效性:系统在数据计算过程中,无法保存全部数据。
三大流式数据处理框架
- Storm:提供原生流处理,延迟极低,但吞吐量较低且不支持状态管理。
- Spark Streaming:采用微批处理模型,支持高吞吐量和状态管理,但延迟较高。
- Flink:结合了原生流处理和微批处理的优点,提供低延迟、高吞吐量、精确一次的数据保证和强大的状态管理能力,适用于复杂的实时数据处理场景。