Storm是什么?
Storm是Twitter开源的分布式实时大数据处理框架,被业界称为实时版Hadoop。(全量|增量 硬盘|内存 离线|实时)随着越来越多的场景对Hadoop的MapReduce高延迟无法容忍,比如网站统计、推荐系统、预警系统、金融系统(高频交易、股票)等等,大数据实时处理解决方案(流计算)的应用日趋广泛,目前已是分布式技术领域最新爆发点,而Storm更是流计算技术中的佼佼者和主流。
按照storm
作者的说法,Storm
对于实时计算的意义类似于Hadoop
对于批处理的意义。Hadoop
提供了map
、reduce
原语,使我们的批处理程序变得简单和高效。同样,Storm
也为实时计算提供了一些简单高效的原语,而且Storm
的
Trident
是基于Storm
原语更高级的抽象框架,类似于基于Hadoop
的Pig
框架,让开发更加便利和高效。本课程会深入、全面的讲解Storm
,并穿插企业场景实战讲述Storm
的运用。
Storm 常见场景
推荐系统:实时推荐,根据下单或加入购物车推荐相关商品(而不是相似商品)
金融系统
预警系统
网站统计:实时销量、流量统计,如淘宝双11
效果图
实时处理
试想一下你自己实现实时计算的方案?
数据源务必实时,所以采用
Message Queue
作为数据源,消息处理Comsumer
实时从MQ
获取数据进行处理,返回结果到Web
或写DB
。
这种方式有以下几个缺陷:
1
、单机模式,能处理的数据量有限
2
、不健壮,服务器挂掉即结束。而Storm
集群节点挂掉后,任务会重新分配给其他节点,作业不受影响。
3
、失败重试、事务等,你需要在代码上进行控制,过多精力放在业务开发之外。
4
、伸缩性差: 当一个消息处理者的消息量达到阀值,你需要对这些数据进行分流, 你需要配置这些新的处理者以让他们处理分流的消息。
Storm一些关键特性
1.适用场景广泛: storm可以实时处理消息和更新DB,对一个数据量进行持续的查询并返回客户端(持续计算),对一个耗资源的查询作实时并行化的处理(分布式方法调用,即DRPC),storm的这些基础API可以满足大量的场景。
2.可伸缩性高: Storm的可伸缩性可以让storm每秒可以处理的消息量达到很高。扩展一个实时计算任务,你所需要做的就是加机器并且提高这个计算任务的并行度 。Storm使用ZooKeeper来协调集群内的各种配置使得Storm的集群可以很容易的扩展。
3. 保证无数据丢失: 实时系统必须保证所有的数据被成功的处理。 那些会丢失数据的系统的适用场景非常窄, 而storm保证每一条消息都会被处理, 这一点和S4相比有巨大的反差。
4.
异常健壮
: storm
集群非常容易管理,轮流重启节点不影响应用。
5.
容错性好
:在消息处理过程中出现异常, storm
会进行重试
6.
语言无关性
: Storm
的topology
和消息处理组件(Bolt)
可以用任何语言来定义, 这一点使得任何人都可以使用storm.