Storm-Flux简介
Fluk
Fluk是storm中的一個框架,主要功能是簡化storm 任務在管理、配置topology中的一些問題和麻煩。
產生的原因背景
在管理storm 的topolgy的過程中,我們最常做的工作就是提交jar包。如下代碼所示:
public static void main(String[] args) throws Exception {// 返回的邏輯值用來判斷我們是否在本地上運行// 創建必要的配置選項...boolean runLocal = shouldRunLocal();if(runLocal){LocalCluster cluster = new LocalCluster();cluster.submitTopology(name, conf, topology);} else {StormSubmitter.submitTopology(name, conf, topology);} }上述提交任務的代碼,通常都是位于上層的java任務管理器中。同時關于topoplgy的定義也位于其中,每當任務有變動,都需要重新編譯jar包,重新提交才可以。為了減少這部分工作,Fluk就將這部分工作接手了過來,改為配置的方式進行。基于此得出Fluk的主要功能點如下:
- 安裝和部署storm 拓撲采用配置的方式而不是內置的方式進行。
- 通過使用yaml dsl 定義storm core api(spouts/bolt)
- yaml dsl 支持對storm-kafka、storm-hdfs、storm-hbase等。
Flux 使用
在pom 文件中加入對flux的依賴,如下所示:
<!-- 在shaded jar文件中包含FLux和用戶依賴包 --> <dependencies><!-- Flux include --><dependency><groupId>org.apache.storm</groupId><artifactId>flux-core</artifactId><version>${storm.version}</version></dependency><!-- Flux Wrappers include --><dependency><groupId>org.apache.storm</groupId><artifactId>flux-wrappers</artifactId><version>${storm.version}</version></dependency><!-- 在這里添加用戶依賴包... --></dependencies> <!-- 創建一個包括所有依賴包的大大的jar文件 --> <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>1.4</version><configuration><createDependencyReducedPom>true</createDependencyReducedPom></configuration><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformerimplementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/><transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>org.apache.storm.flux.Flux</mainClass></transformer></transformers></configuration></execution></executions></plugin></plugins> </build>部署和運行Flux
和以前使用storm jar 提交任務的方式基本相同。只是由于當前的任務中可能已經沒有了對topology的定義,所以需要定義你使用的flux的yaml文件是哪一個,以便找到對應的topolgy邏輯,如下所示:
storm jar myTopology-0.1.0-SNAPSHOT.jar org.apache.storm.flux.Flux --local my_config.yaml根據以上可以看到Flux的和興就在對yaml文件的編寫配置。下面具體說明一下
yaml配置
Flux 拓撲定義
- 一個spouts 列表,每一個項通過一個唯一的ID區別
- 一個bolts列表,每一個項通過一個唯一的ID區別
- 一個可以創建 org.apache.storm.generated.StormTopology 實例的JVM類
上面是一個大的配置框架,下面說一些具體的特征配置
組件
組件從本質來說是對象實例,用來在對spouts和bolts的配置選項中獲取。如果你對Spring框架很熟悉,這里的組件大概就類比于Spring中的beans。每一個組件都是可被識別的,至少是可以通過一個唯一的標識符(字符串)和一個類名(字符串)。舉個例子,以下的例子將會創建一個 org.apache.storm.kafka.StringScheme 類的實例作為關鍵字 "stringScheme" 的引用。這里我們假設這個類 org.apache.storm.kafka.StringScheme 有一個默認的構造函數。
components:- id: "stringScheme"className: "org.apache.storm.kafka.StringScheme"(假設有默認的構造函數)上面提到的定義的組件使用的是class類采用的是默認構造函數,如果需要自己構造則采用如下的方法
自定義構造函數
通過在yaml文件中增加constructorArgs的方法來定義構造函數。
- id: "zkHosts"className: "org.apache.storm.kafka.ZkHosts"constructorArgs:- "localhost:2181"(通過調用一個把單個字符串“localhost:2181”作為參數傳遞給構造函數來創建一個對象)contructorArgs 是一個列表,其元素是對象。這個列表會被傳遞給類的構造函數們。上面的例子就是將zk的配置用參數的方式傳入到class的構造函數中。
引用
每一個組件實例都通過一個唯一的id可悲其他組件重復使用。為了引用一個已存在的組件,你需要在使用 ref 這個標簽的時候指明這個組件的id。
在以下的例子中,一個名為的組件被創建,之后將被作為另一個組件的構造函數的參數被引用
components:- id: "stringScheme"className: "org.apache.storm.kafka.StringScheme"- id: "stringMultiScheme"className: "org.apache.storm.spout.SchemeAsMultiScheme"constructorArgs:- ref: "stringScheme" # component with id "stringScheme" must be declared above.屬性
除去允許在調用構造函數的時候傳進不同的參數,Flux同樣允許在配置組件的時候使用被聲明為 public 的類似JavaBean的setter方法和域
- id: "spoutConfig"className: "org.apache.storm.kafka.SpoutConfig"constructorArgs:# brokerHosts- ref: "zkHosts"# topic- "myKafkaTopic"# zkRoot- "/kafkaSpout"# id- "myId"properties:- name: "ignoreZkOffsets"value: true- name: "scheme"ref: "stringMultiScheme"參考鏈接:http://storm.apachecn.org/releases/cn/1.1.0/flux.html
轉載于:https://www.cnblogs.com/angellst/p/8660686.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Storm-Flux简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java的各种打包方式
- 下一篇: excel导出优化