Apache Storm 1.1.0 发布概览
写在前面的话
本人长期关注数据挖掘与机器学习相关前沿研究。欢迎和我交流。
我自己测试了一下这个版本,总的来说更加稳定,新增的特性并没有一一测试,仅凭kafk-client来说,是达到了生产环境的使用。
使用阿里云服务器的话,使用清华的节点下载是巨快的。(http://mirrors.tuna.tsinghua.edu.cn/apache/storm/apache-storm-1.1.0/apache-storm-1.1.0.tar.gz)
Storm 1.1.0 发布
Apache Storm社区很激动地宣布Storm1.1.0已经发布,已经可从下载页面 获得。
此版本代表了Apache Storm发展的一个重大里程碑,并包含大量新功能,可用性和性能改进,其中一些在下面介绍。
Streaming SQL
Storm 1.1.0支持由Apache Calcite驱动支持的原生Streaming SQL,允许用户通过运行SQL查询流数据或更新外部系统和数据存储(如Apache Hive)。要部署基于SQL的拓扑,用户可以在文本文件中定义SQL查询,并使用storm sql命令将生成的拓扑提交给Storm集群。Storm将SQL编译成Trident拓扑并在集群上运行。
Storm的SQL支持包括以下功能:
- 外部数据源的输入/输出,包括Apache Kafka,HDFS,MongoDB和Redis
- 元组过滤
- 映射
- 生成组件的用户自定义平行度
- 用户定义函数(UDF)
- CSV,TSV和Avro输入/输出格式
- 通过
ISQLTridentDataSource
接口扩展其他数据源
有关Storm SQL支持(包括示例)的更多信息,请参阅以下资源:
Apache Kafka集成改进
除了基于Kafka简单消费者的Kafka 0.8 / 0.9 版本的传统支持外,Storm还支持包括基于新的Kafka消费者API对Kafka 0.10及更高版本。Storm与Kafka 0.10及更高版本的集成是高度灵活和可扩展的,其中的一些功能包括:
- 增强配置API
- 细粒度偏移量控制(启动时和失败后)
- 消费者组支持
- 可插拔记录翻译器
- 通配符主题
- 多流支持
- 手动分区控制
- Kafka安全支持
有关Storm的Kafka集成的更多信息,请参阅以下文档:
支持PMML (Predictive Model Markup Language,预测模型标记语言)
为了更好地支持机器学习用例,Storm现在通过一般的PMML Bolt支持在拓扑中执行PMML模型。PMMLPredictorBolt
允许用户指定一个模型,原始输入以及生成的流和输出字段。在运行时,Bolt将处理输入的原始数据,使用给定的输入执行模型,并输出具有预测字段和输出字段的分数的元组。有关Storm的PMML支持的更多信息,请参见这里 。
Druid 集成
Druid 是一个可扩展的,高性能的,面向列的分布式数据存储,适用于实时分析用例。 Storm 1.1.0引入了一个Storm Bolt和Trident状态实现,用于将数据流传输到Druid数据存储中。Storm's Druid集成的文档可以在这里 找到。
OpenTSDB 集成
OpenTSDB 是基于Apache HBase的高度可扩展的时间序列数据库。 Storm 1.1.0添加了一个Storm Bolt和Trident状态实现,用于将数据写入OpenTSDB。 Storm的OpenTSDB集成为用户提供了一个简单的接口(ITupleOpenTsdbDatapointMapper
)来执行转换,使用户能够对Storm元组如何映射到OpenTSDB数据结构进行细微的控制。可以在这里 找到关于Storm的OpenTSDB集成的信息。
支持AWS Kinesis
对于希望与亚马逊Kinesis服务集成的用户,Storm 1.1.0现在包括一个用于消费来自Kinesis的消息流的 Spout。像Storm的大部分外部系统集成组件一样,Kinesis Spout提供了一个简单的接口(RecordToTupleMapper),用于控制Kinesis消息如何转换为Storm元组。 Kinesis spout提供了一个额外的接口(FailedMessageRetryHandler),允许用户自定义Spout的故障处理逻辑。这里 可以找到Kinesis Spout的文档。
支持HDFS
Storm的HDFS集成现在包括一个从HDFS文件系统连续流式传输数据的 Spout。Storm的HDFS端口监视新文件的可配置目录,并将数据反馈至拓扑。当spout完成处理文件时,它将被移动到已配置的归档目录。如果文件已损坏或以其他方式不可处理,相应的文件将被移动到特定目录。通过一个确保每个文件由单个 Spout实例“owned”的锁定机制可以实现 Spout的并行性。 HDFS端口支持连接到使用Kerberos身份验证保护的HDFS实例。有关使用HDFS Spout的更多信息,请参阅Storm HDFS文档 。
Flux改进
Flux是一个框架和一组实用程序,允许用户声明性地定义Storm拓扑,并避免在拓扑组件中硬编码配置值。 Storm 1.1.0引入了对Flux框架的以下增强功能:
- Storm UI中的Flux拓扑可视化
- 支持状态Bolt和窗口
- 支持命名流
- 支持引用的列表
有关Flux的更多信息,请参见Flux文档。
拓扑部署增强功能
在以前的Storm版本中,通常必须将所有拓扑依赖关系包含在shaded的“uber jar”中,或者通过使其在Storm的类路径上可用。在Storm 1.1.0中,storm jar
命令现在包括在拓扑提交期间上传附加依赖项的选项。 --jars
命令行选项允许用户指定要上传的本地jar文件。或者,storm jar
命令提供了--artifacts
选项,用于通过它们的Maven坐标来指定附加的jar文件依赖关系。最后,对于Maven Central之外的Maven工件,-artifactRepository
选项允许用户指定附加的存储库以进行依赖性解析。有关storm jar
命令的可用选项的更多信息,请参见运行 storm help jar
命令。
RAS (资源意识调度, Resource Aware Scheduler)改进
在Storm 1.0中引入的资源感知调度程序添加了一个考虑了集群中可用的内存(堆和堆)和CPU资源的调度程序实现。在风暴1.1.0中,RAS算法进行了大修,大大提高了集群资源利用率,并将机架知名度引入了调度策略。有关RAS新功能的更多信息,请参见RAS文档 和引入新的机架感知算法的JIRA故障单。
二进制分配的重要变化
为了最小化二进制分发的文件大小,不再包含外部组件(即“连接器”)二进制文件和已编译的示例。示例仅包含在源代码中,但可以使用Maven mvn install
命令轻松编译。
外部组件移动到Maven Central
大多数外部组件现在仅在Maven Central中托管。外部组件目录将包含README.md文件,但不包含jar文件。我们鼓励用户利用Maven风格依赖解析(Maven,Gradle等)构建系统来构建拓扑jar,并避免手动构建拓扑。这些组件的Maven 路径如下:
Group ID: org.apache.storm Artifact ID: component directory name Version: 1.1.0
对于无法使用Maven进行构建的用户,可以从Maven Central下载以下URL模式的外部组件jar文件:
http://repo1.maven.org/maven2/org/apache/storm/${artifactID}/${version}/${artifactId}-${version}.jar
例如,要下载storm-kafka-client jar文件,URL将是:
http://repo1.maven.org/maven2/org/apache/storm/storm-kafka-client/1.1.0/storm-kafka-client-1.1.0.jar