Storm的应用前景
Storm是一个开源的分布式实时计算系统,可以简单、可靠的处理大量的数据流。Storm有很多使用场景:如实时分析,在线机器学习,持续计算,分布式RPC,ETL等等。
Storm支持水平扩展,具有高容错性,保证每个消息都会得到处理,而且处理速度很快(在一个小集群中,每个结点每秒可以处理数以百万计的消息)。Storm的部署和运维都很便捷,而且更为重要的是可以使用任意编程语言来开发应用。
Storm特点
1)、编程模型简单
类似于MapReduce降低了并行批处理复杂性,Storm降低了进行实时处理的复杂性。
2)、可扩展
计算是在多个线程、进程和服务器之间并行进行的。
3)、高可靠性
Storm保证每个消息至少能得到一次完整处理。任务失败时,它会负责从消息源重试消息。
4)、高容错性
Storm会管理工作进程和节点的故障。
5)、支持多种编程语言
可以使用各种编程语言。你可以在Storm之上使用各种编程语言。
默认支持Clojure、Java、Ruby和Python。要增加对其他语言的支持,只需实现一个简单的Storm通信协议即可。
6)、支持本地模式
Storm有一个“本地模式”,可以在处理过程中完全模拟Storm集群。这让你可以快速进行开发和单元测试。
7)、高效
系统的设计保证了消息能得到快速的处理,使用Ø MQ作为其底层消息队列。
Twitter列举Storm三大类应用
1)、信息流处理(Stream processing)
Storm可用来实时处理新数据和更新数据库,兼具容错性和可扩展性。
2)、连续计算(Continuous computation)
Storm可进行连续查询并把结果即时反馈给客户端。比如把Twitter上的热门话题发送到浏览器中。
3)、分布式远程程序调用(Distributed RPC)
Storm可用来并行处理密集查询。
Storm的拓扑结构是一个等待调用信息的分布函数,当它收到一条调用信息后,会对查询进行计算,并返回查询结果。举个例子Distributed RPC可以做并行搜索或者处理大集合的数据。
Storm与Hadoop的对比
hadoop是实现了mapreduce的思想,将数据切片计算来处理大量的离线数据。hadoop处理的数据必须是已经存放在hdfs上或者类似hbase的数据库中,所以hadoop实现的时候是通过移动计算到这些存放数据的机器上来提高效率而storm
不同,storm是一个流计算框架,处理的数据是实时消息队列中的,所以需要我们写好一个topology逻辑放在那,接收进来的数据来处理,所以是通过移动数据平均分配到机器资源来获得高效率。
hadoop的优点是处理数据量大(瓶颈是硬盘和namenode,网络等)[[,分析灵活,可以通过实现dsl,mdx等拼接hadoop命令或者直接使用hive,pig等来灵活分析数据。适应对大量维度进行组合分析缺点就是慢:每次执行前要分发jar包,hadoop
每次map数据超出阙值后会将数据写入本地文件系统,然后在reduce的时候再读进来storm的优点是全内存计算,因为内存寻址速度是硬盘的百万倍以上,所以storm
的速度相比较hadoop非常快(瓶颈是内存,cpu)缺点就是不够灵活:必须要先写好
topology结构来等数据进来分析。
Storm实际处理场景
1)、超速报警系统
实时分析过往车辆的数据,一旦车辆数据超过预设的临界值,便触发一个trigger并把相关的数据存入数据库。
2)、临界分析
瞬间临界值监测
一个字段的值在那个瞬间超过了预设的临界值,如果条件符合的话则触发一个trigger。举个例子当车辆超越80公里每小时,则触发trigger。
时间序列临界监测
字段的值在一个给定的时间段内超过了预设的临界值,如果条件符合则触发一个触发器。比如:在5分钟类,时速超过80KM两次及以上的车辆。