Jstorm 是由Storm演化而来,在架构和实现上都有很大的相似度,并且沿用了Storm的编程接口,Storm的程序在很多版本上,可以无缝迁移到Jstorm。整体上说,Jstorm更稳定,灵活性更高,性能更高。
- Jstorm Nimbus 实现HA
当一台nimbus挂了,自动热切到备份nimbus - 彻底解决Storm雪崩问题
底层RPC 采用netty + disruptor,保证发送速度和接受速度是匹配的 - rebalance
Storm采取的策略更自动化,可能会影响稳定性。而Jstorm则采取更稳定的策略,在下面的情况发生时,都不会rebalance,可以手动relanbance
1. 添加supervisor时, 会触发任务rebalance
2. Supervisor shutdown时, 触发任务rebalance
3. 提交新任务时,当worker数不够时,触发其他任务做rebalance
- Jstorm调度策略更稳定
当新拓扑提交时,Jstorm不会去抢占老任务占用的资源cpu,memory,disk,net。 - Jstorm减少对ZK的访问量
去掉大量无用的watch,task的心跳时间延长一倍,Task心跳检测无需全ZK扫描 - Jstorm调度更强大
可以从4个维度对任务进行资源分配,CPU,Memory,Disk,Net。需要开启Cgroups,具体http://blog.csdn.net/zengqiang1/article/details/78451307 - Jstorm默认一个task,一个cpu slot,当task消耗更多的cpu时,可以申请更多cpu slot
- Jstorm 默认task,不申请disk slot,当task 磁盘IO较重时,可以申请disk slot
- Jstorm可以强制某个component的task 运行在不同的节点上
- Jstorm 可以强制topology运行在单独一个节点上
- Jstorm可以自定义任务分配
提前预约任务分配到哪台机器上,哪个端口,多少个cpu slot,多少内存,是否申请磁盘 - JstormWorker 内部全流水线模式,Spout nextTuple和ack/fail运行在不同线程
nextTuple中 做sleep和wait操作不会block ack/fail 动作 - Jstorm底层使用ZeroMq, 比storm快30%
- Jstorm底层使用netty时, 和storm快10%,并且稳定非常多
Jstorm 为什么性能更好
- Zeromq 减少一次内存拷贝
- 增加反序列化线程
- 重写采样代码,大幅减少采样影响
- 优化ack代码
- 优化缓冲map性能
- Java 比clojure更底层
作者:glowd
原文:https://blog.csdn.net/zengqiang1/article/details/78448694
版权声明:本文为博主原创文章,转载请附上博文链接!