布式实时计算系统Storm新版发布,超越Hadoop?
Apache旗下的分布式实时计算系统Storm终于发布主要版本更新Storm 2.0,这个版本在性能跟功能上,都有重大改进,其核心重新以Java实现,不只改进了性能,更方便功能的扩展,而新版本也改变了与Kafka整合的方式。
Apache Storm是一个开源分布式计算系统,可以处理与Hadoop类似的工作,只不过Hadoop只能以批次进行,但是Storm却能连续无限的处理数据流,进行如实时分析、在线机器学习或是ETL等工作。Apache Storm的执行速度非常快,其基准检验每个节点每秒可以处理超过一百万个Tuple。
开发团队重新设计Storm的核心,把原本用Clojure实现的部分删除,现在整个核心都是以纯Java实现,除了提高性能之外,也让Storm内部的API更容易使用以及扩展,官方提到,过去Storm中使用Clojure的部分也没有什么不好,只是因为Clojure学习曲线比较高,阻碍了许多新的贡献者,而在改成Java后,Storm代码将更容易维护。
Storm 2.0的核心简化了线程模型,并且加入了高性能的消息传输子系统,以及轻量级的Back Pressure模型,以向后兼容为前提,提高消息吞吐量并降低延迟,这些改进让Storm 2.0成为一个可以打破1微秒延迟的串流引擎。Storm 2.0中加入了一个新类型API,让使用者可以更简单地以函数表达串流计算,这些API建立在核心之上,核心会自动融合多重操作,并最佳化工作管道。
另外,Storm 2.0与Kafka的整合大幅度地改变,原本Storm 1.x版本的Kafka整合是使用storm-kafka模块,但是由于Kafka弃用了底层的客户端函数库,因此Storm的使用者,现在必须转而使用storm-kafka-client模块,这个模块是整合kafka-clients函数库撰写而成。官方表示,新旧模块的迁移很简单,他们也提供了说明文件,让用户对照新旧模块的功能。
值得注意的是,storm-kafka-client模块在Storm 1.x的时候,允许Kafka以自己的机制管理接口(Spout)与其负责的扇区,但后来经官方评估,认为这个机制并不适合Storm,因此在1.2.0弃用,并于2.0完全移除。而且storm-kafka-client模块的订阅接口也被删除,官方提到,除非使用者自定义订阅操作,否则不会有影响。