流数据是指由数千个数据源持续生成的数据,通常也同时以数据记录的形式发送,规模较小(约几千字节)。流数据包括多种数据,例如客户使用您的移动或 Web 应用程序生成的日志文件、网购数据、游戏内玩家活动、社交网站信息、金融交易大厅或地理空间服务,以及来自数据中心内所连接设备或仪器的遥测数据。

此类数据需要按记录或根据滑动时间窗口按顺序进行递增式处理,可用于多种分析,包括关联、聚合、筛选和取样。借助此类分析得出的信息,公司得以深入了解其业务和客户活动的方方面面,例如服务使用情况(用于计量/计费)、服务器活动、网站点击量以及设备、人员和实物的地理位置,从而迅速对新情况做出响应。例如,公司可以持续分析社交媒体流,从而跟踪公众对其品牌和产品的看法的变化,并在必要时及时做出反应。


对于持续生成动态新数据的大多数场景,采用流数据处理是有利的。这种处理方法适用于大多数行业和大数据使用案例。通常情况下,各公司一开始都是从简单的应用程序开始,例如收集系统日志以及进行滚动计算最小值-最大值等初级处理。然后,这些应用程序逐渐发展为需要完成更加复杂的近实时处理。最初,应用程序可能通过处理数据流生成简单的报告,然后再执行一些简单的响应操作,例如在关键指标超出一定阀值时发出警报。最终,这些应用程序会执行形式更加复杂的数据分析,如应用机器学习算法,还会从数据中提取更深入的信息。经过一段时间后,开始应用复杂的流事件处理算法,如利用时间窗口衰减算法查找最近的热门电影,进一步丰富了信息内容。


  • 交通工具、工业设备和农业机械上的传感器将数据发送到流处理应用程序。该应用程序再监控性能,提前检测任何潜在缺陷,自动订购备用部件,从而防止设备停机。
  • 一家金融机构实时跟踪股市波动,计算风险价值,然后根据股票价格变动自动重新平衡投资组合。
  • 一家房地产网站跟踪客户移动设备中的一部分数据,然后根据其地理位置实时建议应走访的房产。
  • 一家太阳能发电公司必须维持可满足客户需求的发电量,否则就要支付罚金。该公司实施了一个流数据应用程序,用以监控电力系统中的所有电池板,并实时调度服务,从而最大限度缩短了每个电池板的低产能期,也因此减少了相关的罚款支出。
  • 一家媒体出版商对数十亿的在线内容点击流记录进行流处理,利用有关用户的人口统计信息汇总和丰富数据,并优化网站上的内容投放,从而实现关联性并为受众提供更佳的体验。
  • 一家网络游戏公司收集关于玩家与游戏间互动的流数据,并将这些数据提供给游戏平台,然后再对这些数据进行实时分析,并提供各种激励措施和动态体验来吸引玩家。

在讨论流数据之前,有必要比较一下流处理批处理批处理可用于计算对不同数据集的任意查询。它一般用于计算从所含的所有数据得到的结果,并实现对大数据集的深入分析。例如,Amazon EMR 等基于 MapReduce 的系统就是支持批处理任务的平台。相反,流处理则需要摄取一个数据序列,增量式更新指标、报告和汇总统计结果,以响应每个到达的数据记录。这种处理方法更适合实时监控和响应函数。

  批处理 流处理
数据范围 对数据集中的所有或大部分数据进行查询或处理。 对滚动时间窗口内的数据或仅对最近的数据记录进行查询或处理。
数据大小
大批量数据。
单条记录或包含几条记录的微批量数据。
性能 几分钟至几小时的延迟。 只需大约几秒或几毫秒的延迟。
分析 复杂分析。 简单的响应函数、聚合和滚动指标。

很多组织纷纷结合使用两种方法,从而构建一种混合模式,并同时维持实时处理层和批处理层。数据首先经由流数据平台(如 Amazon Kinesis)处理,以提取实时信息,然后保存到 S3 等存储中,数据可在此进行转换和加载,以用于各种批处理使用案例。


流数据处理需要两个层:存储层和处理层。存储层需要支持记录定序和高度一致性,以便以快速、便宜且可重复的方式读取和写入大型数据流。处理层负责处理存储层中的数据,基于该数据运行计算,然后通知存储层删除不再需要的数据。您还必须为存储层和处理层制定可扩展性、数据持久性和容错规划。因此,出现了可提供构建流数据应用程序所需的基础设施的多种平台,其中包括 Amazon Kinesis StreamsAmazon Kinesis FirehoseApache Kafka、Apache Flume、Apache Spark Streaming 和 Apache Storm。


Amazon Web Services (AWS) 提供多种使用流数据的选项。您可以利用由 Amazon Kinesis 提供的托管流数据服务,也可以在 Amazon EC2 上的云中部署和管理您自己的流数据解决方案。

Amazon Kinesis 是一种在 AWS 上流处理数据的平台,提供多种强大的服务,让您可以轻松地加载和分析流数据,另外还让您能根据具体需求来构建自定义流数据应用程序。它提供两种服务:Amazon Kinesis Firehose 和 Amazon Kinesis Streams。

另外,您还可以在 Amazon EC2 和 Amazon EMR 上运行其他流数据平台,如 Apache Kafka、Apache Flume、Apache Spark Streaming 和 Apache Storm。 

通过 Amazon Kinesis Streams,您可以构建自己的自定义应用程序来处理或分析流数据,以满足特定需求。它能够每小时从成千上万个来源连续捕获和存储数 TB 的数据。然后,您可以构建应用程序来处理来自 Amazon Kinesis Streams 的数据,以支持实时仪表板、生成警报、实施动态定价和广告等等。Amazon Kinesis Streams 支持您选择的流处理框架,包括 Kinesis Client Library (KCL)、Apache Storm 和 Apache Spark Streaming。了解有关 Amazon Kinesis Streams 的更多信息 »

Amazon Kinesis Firehose 是将流数据加载到 AWS 的最简单的方式。它可以捕获流数据并将其自动加载到 Amazon S3 和 Amazon Redshift,借助当前正在使用的现有商业智能工具和控制面板实现近乎实时的分析。借助它,您可以快速实施 ELT 方法,并迅速从流数据中受益。了解有关 Amazon Kinesis Firehose 的更多信息 »


您可以在 Amazon EC2 和 Amazon EMR 上安装您选择的流数据平台,并构建自己的流存储层和处理层。通过在 Amazon EC2 和 Amazon EMR 上构建自己的流数据解决方案,您可以避免基础设施配置冲突,还可以使用多种流存储和处理框架。适用于流数据存储层的选项包括 Apache KafkaApache Flume。适用于流数据处理层的选项包括 Apache Spark StreamingApache Storm