配色: 字号:
Storm和JStorm
2017-03-31 | 阅:  转:  |  分享 
  
Storm和JStorm由于storm的内核是clojure编写的,目前阿里巴巴公司已经有开源的Copy版本Jstorn,以下本ID为你带
来其中相关区别。关于流处理框架,在先前的文章汇总已经介绍过http://www.biaodianfu.com/storm.htm
lStrom,今天学习的是来自阿里的的流处理框架JStorm。简单的概述Storm就是:JStorm比Storm更稳定,更强大
,更快,Storm上跑的程序,一行代码不变可以运行在JStorm上。直白的将JStorm是阿里巴巴的团队基于Storm的二次开发
产物,相当于他们的Tengine是基于Ngix开发的一样。以下为阿里巴巴团队放弃直接使用Storm选择自行开发JStorm的原因:
阿里拥有自己的实时计算引擎类似于hadoop中的MR开源storm响应太慢开源社区的速度完全跟不上Ali的需求降低未来运维成本提
供更多技术支持,加快内部业务响应速度现有Storm无法满足一些需求现有storm调度太简单粗暴,无法定制化Storm任务分配不平
衡RPCOOM一直没有解决监控太简单对ZK访问频繁JStorm相比Storm更稳定Nimbus实现HA:当一台nimbus挂
了,自动热切到备份nimbus原生StormRPC:Zeromq使用堆外内存,导致OS内存不够,Netty导致OOM;JS
torm底层RPC采用netty+disruptor保证发送速度和接受速度是匹配的新上线的任务不会冲击老的任务:新调度从cp
u,memory,disk,net四个角度对任务进行分配,已经分配好的新任务,无需去抢占老任务的cpu,memory,disk和
netSupervisor主线Spout/Bolt的open/prepar所有IO,序列化,反序列化减少对ZK的访问量:去掉大
量无用的watch;task的心跳时间延长一倍;Task心跳检测无需全ZK扫描。JStorm相比Storm调度更强大彻底解决了st
orm任务分配不均衡问题从4个维度进行任务分配:CPU、Memory、Disk、Net默认一个task,一个cpuslot。当
task消耗更多的cpu时,可以申请更多cpuslot默认一个task,一个memoryslot。当task需要更多内存时,可
以申请更多内存slot默认task,不申请diskslot。当task磁盘IO较重时,可以申请diskslot可以强制某个c
omponent的task运行在不同的节点上可以强制topology运行在单独一个节点上可以自定义任务分配,提前预约任务分配到哪
台机器上,哪个端口,多少个cpuslot,多少内存,是否申请磁盘可以预约上一次成功运行时的任务分配,上次task分配了什么资源,
这次还是使用这些资源JStorm相比Storm性能更好JStorm0.9.0性能非常的好,使用netty时单worker发送
最大速度为11万QPS,使用zeromq时,最大速度为12万QPS。JStorm0.9.0在使用Netty的情况下,比Stor
m0.9.0使用netty情况下,快10%,并且JStormnetty是稳定的而Storm的Netty是不稳定的在使用Z
eroMQ的情况下,JStorm0.9.0比Storm0.9.0快30%性能提升的原因:Zeromq减少一次内存拷贝增
加反序列化线程重写采样代码,大幅减少采样影响优化ack代码优化缓冲map性能Java比clojure更底层JStorm的其他优化
点资源隔离。不同部门,使用不同的组名,每个组有自己的Quato;不同组的资源隔离;采用cgroups硬隔离Classloader
。解决应用的类和Jstorm的类发生冲突,应用的类在自己的类空间中Task内部异步化。Worker内部全流水线模式,Spout
nextTuple和ack/fail运行在不同线程?具体如何实现,请参考本ID的的博文系列?【jstorm-源码解析】
献花(0)
+1
(本文系关平藏书首藏)