Jstorm 2.2.1 目前已正式发布,用户可以自行前往https://github.com/alibaba/jstorm/wiki/Downloads 下载体验。
性能优化
对比2.1.1和去年的双十一版本0.9.8.1有200%~300%的提升。在高并发和低并发的多个测试场景(word count)中,是Flink性能的120%~200%,是Storm的300%~400%。
JStorm主要从以下几个方面对性能进行优化。
- 重构batch的实现方案
- 优化序列化和反序列过程,减少cpu和网络消耗
- 优化消息关键路径和metrics的cpu开销
- 优化网络接收和发送端的处理策略
- 增加disruptorQueue的异步batch操作
众多新特性支持
- 加入新的snapshot exactly once(只处理一次)框架。
- 对比原有的Trident解决方案有着数倍的性能提升。同时可以减少用户在回滚的过程中的处理逻辑。
- 同时支持at least once(至少处理一次场景)。对比原有的acker机制,可以减少acker的消息处理开销,同时在高吞吐的场景中可以大量的减少acker消息占用的网络带宽。以提高任务性能。
- 完成JStorm on yarn支持。
- 现在JStorm可以实现快速的集群部署,以及集群的扩容和缩容。有效的提高集群资源的弹性和利用率。
3, 重构backpressure设计,支持stage by stage的流控模式。 - 当前的设计更加轻量,让backpressure在流控开启和关闭时更加高效。
- 性能和稳定性对比原因的方案有着很大的提升。
- 现在JStorm可以实现快速的集群部署,以及集群的扩容和缩容。有效的提高集群资源的弹性和利用率。
- 引入Window API。
- 支持tumbling window,sliding window
- 对应的window支持count和duration 模式
- 支持window的watermark机制
- 引入对Flux的支持
- Flux是帮助创建和部署storm拓扑的编程框架及通用组件。帮助用户更方便创建及部署JStorm流式计算拓扑的编程框架
- 通过maven shade的方式,对一些容易冲突的依赖包做shade。以解决jstorm依赖和用户依赖之前的冲突问题。
- 优化Shuffle grouping方案
- 合并shuffle, localOrShuffle和localFirst。根据任务情况自动适配。
- shuffle时会根据下游节点的负载情况,做shuffle。以达到负载均衡。
- 增加Nimbus的黑名单机制。
- 增加Trident对消息batch模式的支持
- 支持集群的全局配置推送
- supervisor info和心跳中增加了buildTs,便于区分出集群中是否存在不同版本的supervisor
- nimbus和supervisor通过ext模块来支持外部插件
- 添加elastic search 5.11的支持, 感谢 @elloray 的PR
众多改进
- 重构nimbus metrics 框架,将原TopologyMetricsRunnable打散成事件驱动
- 重构Topology master的处理逻辑。改为事件驱动。提高Topology的处理性能。
- 重构example 代码, 增加大量example和测试用例
- 默认禁用stream metrics以及其他特定metrics,以减少发送的数据量
- 本地模式下启用metrics
- gauge的实现,由每分钟单值,改为每分钟采样多次计算平均值
- 引入了一种近似计算的方式来计算histogram的值,以减少内存开销
- 增加了Full GC以及supervisor中网络相关的metrics
Bug 修复
- Fix 消息的乱序问题
- Fix supervisor上有大量的zookeeper连接的问题
- Fix task初始化时,deactivate的错误调用
- Fix spout并发高时,少量消息rootid重复,导致消息失败的问题。
- Fix 本地模式的一些bug
- Fix logwriter的bug
- 修复了task metrics中RecvTps, ProcessLatency没有合并到task的bug
- 修复了AsmCounter在flush时的线程同步问题
企业级互联网架构Aliware,让您的业务能力云化:https://www.aliyun.com/aliware