1.业务现状分析
需求: 统计某主站上课程访问的客户端地域信息分布
问题:按小时级别统计、10分钟、5分钟、1分钟、秒级别
分析:小时统计时是可以使用MapReduce来进行离线处理的,但是分钟级别和秒级别时使用MR来做计算就不太靠谱了,因为MapReduce在执行时延时性比较高,适合做离线批处理,MapReduce有MapTask和ReduceTask,每次都会启动进程,运行完之后销毁进程,启动和销毁都会占用一定的时间。所以MapReduce不适合做实时的计算
2.实时流处理产生背景
- 时效性高
- 数据量大
3.实时流处理概述
- 实时计算
实时计算一般都是针对海量数据进行的,一般要求为秒级。 - 流式计算
在不断产生的数据流上进行计算,数据是源源不断的 - 实时流式计算
1+2 就等于实时流式计算,即在不断产生的数据流上面进行实时计算
4.离线计算与试试计算对比
- 数据来源
离线:HDFS上的历史数据,数据量较大
实时:消息队列(Kafka),实时新增/修改记录过来的某一条数据 - 处理过程
离线:MapReduce ==》map + reduce两个阶段构成
实时:Spark(DStream/SS) - 处理速度
离线:慢
实时:快速 - 进程
离线:启动+销毁
实时:7*24不间断
5.实时流处理框架对比
常见实时流处理框架
- Apache Storm
- Apache Spark Streaming
- IBM Stream
- Linked Kafka
- Apache Flink
Storm是由Twitter开源的分布式、高容错的实时处理系统,它的出现令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求。
Spark streaming:是Spark核心API的一个扩展,可以实现高吞吐量的、具备容错机制的实时流数据的处理。
这里只介绍一下Storm和Spark Streaming这两种框架之前的区别
1.处理模型以及延迟
虽然这两个框架都提供可扩展性(Scalability)和可容错性(Fault Tolerance),但是它们的处理模型从根本上说是不一样的。Storm处理的是每次传入的一个事件,而Spark Streaming是处理某个时间段窗口内的事件流。因此,Storm处理一个事件可以达到亚秒级的延迟,而Spark Streaming则有秒级的延迟。
2.容错和数据保证
在容错数据保证方面的权衡方面,Spark Streaming提供了更好的支持容错状态计算。在Storm中,当每条单独的记录通过系统时必须被跟踪,所以Storm能够至少保证每条记录将被处理一次,但是在从错误中恢复过来时候允许出现重复记录,这意味着可变状态可能不正确地被更新两次。而Spark Streaming只需要在批处理级别对记录进行跟踪处理,因此可以有效地保证每条记录将完全被处理一次,即便一个节点发生故障。虽然Storm的 Trident library库也提供了完全一次处理的功能。但是它依赖于事务更新状态,而这个过程是很慢的,并且通常必须由用户实现。
简而言之,如果你需要亚秒级的延迟,Storm是一个不错的选择,而且没有数据丢失。如果你需要有状态的计算,而且要完全保证每个事件只被处理一次,Spark Streaming则更好。Spark Streaming编程逻辑也可能更容易,因为它类似于批处理程序,特别是在你使用批次(尽管是很小的)时。
3.实现和编程API
Storm主要是由Clojure语言实现,Spark Streaming是由Scala实现。如果你想看看这两个框架是如何实现的或者你想自定义一些东西你就得记住这一点。Storm是由BackType和 Twitter开发,而Spark Streaming是在UC Berkeley开发的。
Storm提供了Java API,同时也支持其他语言的API。 Spark Streaming支持Scala和Java语言(其实也支持Python)。另外Spark Streaming的一个很棒的特性就是它是在Spark框架上运行的。这样你就可以想使用其他批处理代码一样来写Spark Streaming程序,或者是在Spark中交互查询。这就减少了单独编写流批量处理程序和历史数据处理程序。
4.生产支持
Storm已经出现好多年了,而且自从2011年开始就在Twitter内部生产环境中使用,还有其他一些公司。而Spark Streaming是一个新的项目,并且在2013年仅仅被Sharethrough使用(据作者了解)。
Storm是 Hortonworks Hadoop数据平台中流处理的解决方案,而Spark Streaming出现在 MapR的分布式平台和Cloudera的企业数据平台中。除此之外,Databricks是为Spark提供技术支持的公司,包括了Spark Streaming。
5.集群管理集成
尽管两个系统都运行在它们自己的集群上,Storm也能运行在Mesos,而Spark Streaming能运行在YARN 和 Mesos上。
6.实时流处理框架与技术选型
7.实时流处理在企业中的应用
- 电信行业中流量短信提醒
- 电商行业