copy from
http://wiki.sankuai.com/pages/viewpage.action?pageId=528017128

Storm
Spark Streaming Storm
数据一致性 能够保证至少一次的语义,但是一次且仅一次的语义很难保证 acker机制+事务拓扑机制,可以保证一次且仅一次的语义
可用性 在美团是Spark Streaming On YARN的模式,YARN一旦运维,就会挂;与已经有spark streaming使用经验的思源沟通后发现,挂掉的情况比较多 storm无论是nimbus、supervisor,还是topology、worker,都有很强的健壮性,挂掉不会有太大的影响;同时只要自己代码中做好完善的宕机恢复机制,不会有太大的问题
join操作 可以方便的实现batch+batch的join,但是要实现精准的全量join,非常难 storm同样也支持batch+batch的join,但是可以自己手工编码,基于外部缓存(比如tair),灵活的根据自己的业务需求实现全量join算法
吞吐量 相对较好 相对较差
实时性 秒级 毫秒级
操作易用性 相对比较易用 相对较难使用
项目本身的成熟性和稳定性 比较新,在业界成熟大规模应用的案例较少,特别是在美团使用的经验非常少而且对比之前的spark core/spark sql使用经验,spark streaming本身依赖spark core,因此很可能有未知的bug,稳定性未知 storm在业界,特别是美团内部,有多年大量的线上项目使用经验,经历了足够的考研,非常的成熟,稳定性非常好
与机器学习的结合使用 天然能够与spark mllib/ spark graphx整合使用,非常适合online learning 与在线机器学习的算法结合使用,较为困难
对SQL的支持 天然能够支持SQL 没有成熟的SQL支持方案

结论:

1、spark streaming:不适合在直接面向外部用户(用户/商家)大规模直接使用;较为适合在面向内部(PM/运营)的项目中使用,特别是需要结合机器学习的场景,同时需要给RD足够的机会和时间踩坑,积累经验

2、storm:适合在所有实时计算的场景中使用;如果是面向内部的,而且与机器学习相结合的场景,建议使用spark streaming,不建议用storm

results matching ""

    No results matching ""