天天看点

Apache Storm 官方文档 —— 源码组织结构

strom 的代码有三个层次:

第一,storm 在一开始就是按照兼容多语言的目的来设计的。nimbus 是一个 thrift 服务,拓扑也被定义为 thrift 架构。thrift 的使用使得 storm 可以用于任何一种语言。

第二,所有的 storm 接口都设计为 java 接口。所以,尽管 storm 核心代码中有大量的 clojure 实现,所有的访问都必须经过 java api。这就意味着 storm 的每个特性都可以通过 java 来实现。

第三,storm 的实现中大量使用了 clojure。可以说,storm 的代码结构大概是一半的 java 代码加上一半的 clojure 代码。但是由于 clojure 更具有表现力,所以实际上 storm 的核心逻辑大多是采用 clojure 来实现的。

下面详细说明了每个层次的细节信息。

<code>componentobject</code> 定义了 bolt 的实现,这个实现可以是以下三种类型中的一种:

一个带有类名与构造器参数的 java 对象结构,storm 可以使用这个结构来实例化 bolt。如果你需要定义一个非 jvm 语言的拓扑这个类型会很有用。使用这种方式,你可以在不创建并且序列化一个 java 对象的情况下使用基于 jvm 的 spout 与 bolt。

<code>componentcommon</code> 定义了组件的其他方面特性,包括:

该组件的输出流以及每个流的 metadata(无论是一个直接流还是基于域定义的流);

该组件消费的输入流(使用流分组所定义的一个将组件 id 与流 id 相关联的 map 来指定);

该组件的并行度;

该组件的组件级配置。

storm 的对外接口基本上为 java 接口,主要的几个接口有:

<a href="http://storm.apache.org/javadoc/apidocs/backtype/storm/topology/irichbolt.html">irichbolt</a>

<a href="http://storm.apache.org/javadoc/apidocs/backtype/storm/topology/irichspout.html">irichspout</a>

<a href="http://storm.apache.org/javadoc/apidocs/backtype/storm/topology/topologybuilder.html">topologybuilder</a>

大部分接口的策略为:

使用一个 java 接口来定义接口;

实现一个具有适当的默认实现的 base 类。

如上所述,spout 和 bolt 都已经根据拓扑的 thrift 定义进行了序列化。

通过 java 接口来详细说明所有的功能可以确保 storm 的每个特征都是有效的。更重要的是,关注 java 接口可以让有 java 使用经验的用户更易上手。

以下是主要的 java 包和 clojure 命名空间的总结。

译者注:clojure 部分内容暂不提供翻译。