对于 storm 来说:
o 建议在那种需要纯实时,不能忍受 1 秒以上延迟的场景下
使用,比如实时金融系统,要求纯实时进行金融交易和分析
o 此外,如果对于实时计算的功能中,要求可靠的事务机制
和可靠性机制,即数据的处理完全精准,一条也不能多,一条也
不能少,也可以考虑使用 Storm
o 如果还需要针对高峰低峰时间段,动态调整实时计算程序
的并行度,以最大限度利用集群资源(通常是在小型公司,集群
资源紧张的情况),也可以考虑用 Storm
o 如果一个大数据应用系统,它就是纯粹的实时计算,不需
要在中间执行 SQL 交互式查询、复杂的 transformation 算子等,
那么用 Storm 是比较好的选择
对于 sparkStreaming 来说:
o 如果对上述适用于 Storm 的三点,一条都不满足的实时场
景,即,不要求纯实时,不要求强大可靠的事务机制,不要求动
态调整并行度,那么可以考虑使用 Spark Streamingo 考虑使用 Spark Streaming 最主要的一个因素,应该是针
对整个项目进行宏观的考虑,即,如果一个项目除了实时计算之
外,还包括了离线批处理、交互式查询等业务功能,而且实时计
算中,可能还会牵扯到高延迟批处理、交互式查询等功能,那么
就应该首选 Spark 生态,用 Spark Core 开发离线批处理,用
Spark SQL 开发交互式查询(sparksql转化成rdd,比mapreduce快很多,并且rdd算子有缓存机制,适合实时向hdfs等数据库写入数据),用 Spark Streaming 开发实时计
算,三者可以无缝整合,给系统提供非常高的可扩展性
Spark Streaming 与 Storm 的优劣分析
o 事实上,Spark Streaming 绝对谈不上比 Storm 优秀。这两
个框架在实时计算领域中,都很优秀,只是擅长的细分场景并不
相同。
o Spark Streaming 仅仅在吞吐量上比 Storm 要优秀,而吞吐
量这一点,也是历来挺 Spark Streaming,贬 Storm 的人着重强
调的。但是问题是,是不是在所有的实时计算场景下,都那么注
重吞吐量?不尽然。因此,通过吞吐量说 Spark Streaming 强于
Storm,不靠谱。
o 事实上,Storm 在实时延迟度上,比 Spark Streaming 就好
多了,前者是纯实时,后者是准实时。而且,Storm 的事务机
制、健壮性 / 容错性、动态调整并行度等特性,都要比 Spark
Streaming 更加优秀。
o Spark Streaming,有一点是 Storm 绝对比不上的,就是:
它位于 Spark 生态技术栈中,因此 Spark Streaming 可以和
Spark Core、Spark SQL 无缝整合,也就意味着,我们可以对实
时处理出来的中间数据,立即在程序中无缝进行延迟批处理、交
互式查询等操作。这个特点大大增强了 Spark Streaming 的优势
和功能。
storm动态调整并行度的方法:
在java api中设置task数是为了 给rebalance 命令使用,如果使用默认的excutor和task1:1的 无法动态调整 storm rebalance topolopyname -w 10 -n 5 -e BLUE-BOLT=30 -e RED-BOLT=60 注意:acker运行期数目无法动态调整 -w rebalance 等待执行时间 -n 调整worker数量 -e 调整组件并行度 -n和-e 可以单独或者组合使用。