最近调研了一些实时计算方面的技术,同时也对相关概念做了一些了解及梳理。
在一般情况下我们可以这样理解,离线和批量等价、实时和流式等价,但其实这种观点并不完全正确。
假设一种情况:当我们拥有一个非常强大的硬件系统,可以毫秒级的处理Gb级别的数据,那么批量计算也可以毫秒级得到统计结果(当然这种情况非常极端,目前不可能),那我们还能说它是离线计算吗?
所以说离线和实时应该指的是:数据处理的延迟;批量和流式指的是:数据处理的方式。两者并没有必然的关系。
什么是实时计算?这个概念与离线计算是相伴而生的,那么先说下什么是离线计算。
离线计算
离线计算就是在计算开始前已知所有输入数据,输入的数据不会再发生变化,且在解决一个问候就要立即得出结果的前提下进行的计算。
离线计算框架主要有hadoop、spark、MapReduce、HDFS。其中MapReduce被各大公司作为数据处理的主要方案。
MapReduce的思想也是从早期的函数式编程语言中借鉴而来,推广到了分布式系统中。
传统的数据处理方式通常是将数据导入到专门的数据分析工具中,这样会面临两个问题:
1、如果源数据非常大时,往往数据的移动就要花费较长时间。
2、传统的数据处理工具往往是单机模型,面对海量数据时,数据处理的时间也是一个很大的问题。
MapReduce是离线批量计算的代表,采用移动计算优于移动数据的理念,计算任务通常直接在HDFS的dataNode上运行,这样避免了数据的移动(当然reduce阶段还是需要节点间传输数据),并且采用并行计算的方式,大大减少了数据处理时间。
实时计算
随着用户数据量的增加,离线的计算会越来越慢,难以满足用户在某些场景下的实时性要求,因此很多解决方案中引入了实时计算。
很多时候,即使是海量数据,我们也希望即时去查看一些数据指标,实时流计算应运而生。
实时流计算有两个特点,一个是实时,随时可以看数据;另一个是流。
有了这样的需求和产品定义,自然会有相关的技术实现。目前工业级别的老牌实时流计算框架是 Storm、Spark Streaming,Samza、Flink 等等。
阿里云的实时计算(原阿里云流计算)是一套基于Apache Flink构建的一站式、高性能实时大数据处理平台。
主要应用的场景为:
1、实时ETL
集成流计算现有的诸多数据通道和SQL灵活的加工能力,对流式数据进行实时清洗、归并、结构化处理。同时,为离线数仓进行有效的补充和优化,为数据实时传输的提供可计算通道。
2、实时报表
实时化采集、加工流式数据存储。实时监控和展现业务、客户各类指标,让数据化运营实时化。
3、监控预警
对系统和用户行为进行实时检测和分析。实时监测和发现危险行为。
4、在线系统
实时计算各类数据指标,并利用实时结果及时调整在线系统相关策略。在各类内容投放、无线智能推送领域有大量的应用。