Storm是一个分布式的、容错的实时计算系统,它由Twitter公司开源,专门用于数据实时处理的平台。它与Spark Streaming功能相似,都是将流数据分成一个个小块的批(batch)数据进行数据处理,但也有很多不同,下面主要从处理延迟和容错两个方面进行分析。
1.处理模型,延迟
Storm和Spark Streaming这两个框架都提供可扩展性和容错性,它们根本的区别在于处理模型。Storm处理的是每次传入的一个事件,而Spark Streaming处理的是某个时间段窗口内的事件流。因此,Storm处理一个事件可以达到秒内的延迟,而Spark Streaming则有秒级延迟。
2.容错、数据保证(www.xing528.com)
在容错数据保证方面,Spark Streaming提供了更好的支持容错状态计算。在Storm中,每个单独的记录当它通过系统时必须被跟踪,所以Storm能够至少保证每个记录将被处理一次,但是在从错误中恢复过来时允许出现重复记录。这意味着可变状态可能被错误地更新两次。另一方面,Spark Streaming只需要在批处理级别进行跟踪处理,因此即便一个节点发生故障,也可以有效地保证每个批处理过程的数据将完全被处理一次。实际上Storm的Trident library也提供了一次完全处理,但它依赖于事务更新状态,比较慢,通常必须由用户来实现。
对于本书所讲版本的Spark Streaming而言,最小选取的批数据量(Batch Size)的选取在0.5~2s(Storm最小的延迟是100ms左右),故Spark Streaming能够满足除对实时性要求非常高(如高频实时交易)之外的流式准实时(“准实时”表示数据延迟在秒级)计算场景。
简而言之,如果限于毫秒级的延迟,Storm是一个不错的选择,而且没有数据丢失。如果需要有状态的计算,时延秒级,Spark Streaming更好。Spark Streaming的编程逻辑也可能更容易,因为它类似于批处理模型MapReduce,此外因为Spark融合了多种业务模型,所以如果面对融合不同业务的场景,考虑到人工维护成本和数据转换成本,则Spark平台更能符合需求。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。