1、安全性和多用户调度部署


和早期的Hadoop相似,Storm被假设会部署到远离安全威胁的环境中,所以一开始并没有太多的考虑安全性问题。虽然大量用户对Storm都制定了他们自己的安全举措(通常实在防火墙/系统层次),然而这依旧阻碍了许多企业使用Storm。 Yahoo!部署并持有世界上最大的Storm集群之一,他们的技术团队很早就意识到安全性的需要,所以Yahoo!采取了很多措施来保证他们的Storm集群的安全。现在,Yahoo!,Hortonworks,Symantec以及广大的Apache Storm社区团结合作,携手将这些安全举措溶入Apache Storm代码中。 Storm的新安全举措有:

  • 自动证书推送和更新的Kerberos认证
  • 可插拔的访问授权及访问控制机制
  • 支持多用户调度,可对单个用户进行隔离并设置资源限制
  • 模拟多用户调度
  • 对Storm UI、日志查看及DRPC的SSL支持
  • 和其他Hadoop项目(ZooKeeper, HDFS, HBase等等)的安全集成
  • 用户隔离(Storm拓扑以提交该拓扑的用户的身份运行)

关于Storm安全性的具体信息,可查阅安全文档: ​​https://github.com/apache/storm/blob/v0.10.0-beta/SECURITY.md​

2、更加方便版本升级 过去,升级一个Storm集群是一件非常费力的事情,你需要将已部署的拓扑卸载、将一些状态信息从本地磁盘和Zookeeper上移除、安装新版本的Storm,最后再重新部署拓扑。这太麻烦了。 这是由于Storm处理的、用来存储本地状态和分布状态的数据结构所造成的。过去,不同版本之间处理的数据结构可能不兼容。 从0.10.0版本开始,这些局限性将会消失。将来,你可以从0.10.0版本的Storm无缝升级到更新版本的Storm。事实上,对于使用Apache Ambari部署管理集群的用户来说,这些步骤都可以完全自动进行。


3、更加容易使用Flux声明和部署拓扑


Apache Storm 0.10.0集成了Flux框架,该框架能使Storm拓扑的定义和部署变得更加简洁方便。过去,Storm用户经常抱怨拓扑图的定义和java代码的联系太过紧密,导致对拓扑的任何修改都需要重新编译和打包jar文件。Flux能改变这种情况:Flux允许用户将Storm组件打包在单个jar文件中,而使用一个外部文本文件来定义拓扑的布局和配置。 Flux的一些特性包括:

  • 不需要将配置内嵌在拓扑代码中,使Storm拓扑的配置和部署更加简单
  • 支持已有的拓扑代码
  • 使用一个灵活的YAML DSL来定义Storm核心API(Spouts/Bolts)
  • 对大多数Storm组件(storm-kafka, storm-hdfs, storm-hbase等等)的YAML DSL支持
  • 对多语言组件更加方便的支持
  • 支持配置/环境之间的切换(与Maven风格${variable.name}的替换类似)

更多关于Flux的信息可见: ​​https://github.com/apache/storm/blob/v0.10.0-beta/external/flux/README.md​



4、新的分组策略:局部关键词分组策略


除了常见的Storm分组策略外,0.10.0版本的Storm引入了一种新的分组策略——局部关键词分组策略(Partial Key Grouping)。使用局部关键词分组策略,tuple流被按照特定的字段(field)进行切分(这和fields Grouping很相似),但却在下游的bolt中进行平衡。在上游来的数据不均衡时,这种策略能更好的利用资源。 关于Partial Key Grouping和其他分组策略的详细信息可以查看: ​​https://storm.apache.org/documentation/Concepts.html​​  这部分的信息还会详细说明它的工作原理和使用该策略的优点。


5、改进型日志框架


调试一个分布式的应用是十分困难的,主要集中分析的信息源是应用的日志文件。但是在像Storm这种以毫秒为单位的低延迟系统中,日志是一把双刃剑:如果输出的日志过少,你可能会遗漏有用信息;如果输出日志过多,又可能会降低应用的整体性能(因为日志框架会消耗资源)。 在0.10.0版本的Storm中,日志框架就像是Storm内部的一个消息子系统,使用的是由非常高效的LMAX Disruptor消息库实现的Apache Log4j 2。Log4j 2比Storm以往使用的日志框架要高效得多。在日志层面更高效的资源利用意味着更多的资源能被投入到人们最关心的问题上去:执行业务逻辑。 这些改变带来了新的特新,包括:

  • 通过对文件大小、时间期限的组合触发日志滚动
  • 动态更新日志配置,不会丢失日志信息
  • 通过JMX远程监控、配置日志
  • 对Syslog/RFC-5424-compliant的支持
  • 对syslog-ng等日志聚合器的整合


6、与Apache Hive的整合


在Hive 0.13版本中,Hive提供了一个流式数据接入API,使得数据可以连续不断的写入Hive。新来的数据可以以批记录的形式提交到Hive已有的partition或table中去。一旦数据被提交,该数据马上对所有的hive查询可见。 Storm 0.10.0引入了一个新型bolt,允许用户从Storm直接将数据流入Hive。并且为Trident提供了一个State,允许用户从一个Trident拓扑向Hive写入数据。 关于Storm和Hive集成的更多信息,可以查看文档: ​​https://github.com/apache/storm/blob/v0.10.0-beta/external/storm-hive/README.md​



7、支持Redis


Apache Storm 0.10.0也引入了对Redis的支持,允许某个拓扑中的bolt向Redis写入或者查询数据,并且可以方便的进行扩展。对于Trident API,支持Trident State和MapState。 更多信息请查看: ​​https://github.com/apache/storm/blob/v0.10.0-beta/external/storm-redis/README.md​


8、JDBC/RDBMS的整合


很多Storm应用处理数据流需要读、写一个相关的数据仓库。而Storm 0.10.0可支持任何一个与JDBC兼容的数据库。Storm-JDBC包允许Storm Bolt和Trident State向一个数据库写入或者查询数据。 更多详细信息可见Storm-JDBC文档: ​​https://github.com/apache/storm/blob/v0.10.0-beta/external/storm-jdbc/README.md​