文章目錄
- 0.前言
- 搭建完的效果
- 1.教程
- 1.1.docker 安裝 zookeeper
- 1.2. 安裝 storm nimbus
- 1.3.docker 安裝 supervisor
- 1.4.docker 安裝 storm-ui
- 1.5.查看已經啟動的容器
- 1.6.提交topology到 storm集群
- 2.總結
- 3.參考文檔
0.前言
Apache Storm 官方也出了Docker 鏡像 https://hub.docker.com/_/storm/
本文我們就基于官方鏡像搭建一個 Apache Storm 2.4 版本的運行環境,供大家后續學習。
有問題可以參考issue 解決,我的安裝過程一路都很順暢。所以基本上沒有看下面是我的詳細操作和截圖。
可以說網上的亂七八糟的教程不如官方文檔來的實在。
如果想用虛擬機搭建,請參考我的上一篇文章《Centos7搭建Apache Storm 集群運行環境》
搭建完的效果
Storm UI雖然是Storm 的非必須組件,但是是非常有用,基本上離不開的組件,它可以展示很多信息,對我們平時排查問題很有幫助,
-
拓撲列表:顯示當前在Storm集群中運行的所有拓撲的列表。每個拓撲通常會顯示其名稱、ID、狀態和所屬的用戶。
-
拓撲摘要:提供了關于選定拓撲的詳細信息,包括拓撲的名稱、ID、狀態、拓撲圖和組件列表。還可能包括拓撲的啟動時間、運行時長和錯誤信息。
-
組件視圖:顯示了拓撲中的各個組件及其實例的信息。對于每個組件,它通常會顯示組件的ID、類型、輸入輸出流以及處理該組件的工作進程和任務數量。
-
工作進程視圖:提供有關工作進程的詳細信息,包括工作進程的ID、主機名、端口號、啟動時間、堆內存使用情況、線程數等。
-
任務視圖:顯示有關任務的信息,包括任務的ID、工作進程、組件、執行狀態、錯誤信息等。可以查看每個任務的日志和統計數據。
-
錯誤視圖:列出了拓撲中發生的任何錯誤或異常。這包括組件的失敗、任務的錯誤、工作進程的故障等。通常會顯示錯誤的時間戳、類型和詳細描述。
-
日志視圖:顯示了拓撲中各個組件和任務的日志輸出。可以查看實時日志或按時間范圍過濾日志。
-
統計視圖:提供了關于拓撲的性能統計數據。這可能包括拓撲的吞吐量、處理延遲、執行時間、錯誤計數等指標的圖表或表格。
-
配置視圖:顯示了拓撲的配置參數和屬性。可以查看拓撲使用的配置文件以及運行時配置的值。
-
集群概述:提供了有關整個Storm集群的概覽信息,包括集群狀態、拓撲數量、工作進程數量、任務數量等。
請注意,具體的Storm UI頁面內容可能會根據不同的版本和配置有所變化,上述內容僅為一般情況下的解釋。
1.教程
1.1.docker 安裝 zookeeper
我們選擇最新版本的zookeeper
$ docker run -itd --restart always --name ice-zookeeper zookeeper
1.2. 安裝 storm nimbus
創建一個名為ice-nimbus的容器,并在其中運行Storm的Nimbus組件。該容器將與一個名為ice-zookeeper的Zookeeper容器相鏈接,以便Storm Nimbus可以與Zookeeper進行通信。
這一步耗時稍微較長,需要下載鏡像。
$ docker run -itd --restart always --name ice-nimbus --link ice-zookeeper:zookeeper storm storm nimbus
1.3.docker 安裝 supervisor
創建一個名為ice-supervisor
的容器,并在其中運行Storm的Supervisor組件。該容器將與一個名為ice-zookeeper
的Zookeeper容器和一個名為ice-nimbus
的Nimbus容器相鏈接,以便Storm Supervisor可以與Zookeeper和Nimbus進行通信。通過--restart always
選項,當容器退出時,Docker將自動重新啟動該容器,確保Supervisor組件一直處于運行狀態。
$ docker run -d --restart always --name ice-supervisor --link ice-zookeeper:zookeeper --link ice-nimbus:nimbus storm storm supervisor
1.4.docker 安裝 storm-ui
$ docker run -d -p 8980:8080 --restart always --name ui --link ice-nimbus:nimbus storm storm ui
1.5.查看已經啟動的容器
docker ps -a
1.6.提交topology到 storm集群
$ docker run --link ice-nimbus:nimbus -it --rm -v $(pwd)/topology.jar:/topology.jar storm storm jar /topology.jar org.apache.storm.starter.WordCountTopology topology
我們可以在StormUI的最后面看到 Nimbus配置參數:
-
worker.profiler.enabled
: 是否啟用工作進程的性能分析器。在給定的配置中,該值為false
,表示禁用性能分析器。 -
worker.profiler.command
: 用于啟動性能分析器的命令。在給定的配置中,命令為"flight.bash"。 -
worker.profiler.childopts
: 傳遞給性能分析器的JVM參數。在給定的配置中,參數為"-XX:+UnlockCommercialFeatures -XX:+FlightRecorder",用于解鎖商業特性并啟用Flight Recorder。 -
worker.metrics
: 工作進程的度量指標配置。提供了一組度量指標的名稱和相應的類。在給定的配置中,包括CGroup內存使用、CGroup內存限制、CGroup CPU使用、CGroup CPU保證等度量指標。 -
worker.max.timeout.secs
: 工作進程的最大超時時間,以秒為單位。在給定的配置中,超時時間為600秒。 -
worker.log.level.reset.poll.secs
: 重新設置工作進程日志級別的輪詢間隔,以秒為單位。在給定的配置中,輪詢間隔為30秒。 -
worker.heartbeat.frequency.secs
: 工作進程發送心跳的頻率,以秒為單位。在給定的配置中,心跳頻率為1秒。 -
worker.heap.memory.mb
: 工作進程的堆內存大小,以MB為單位。在給定的配置中,堆內存大小為768MB。 -
worker.gc.childopts
: 傳遞給垃圾收集器的JVM參數。在給定的配置中,參數為空字符串,表示沒有額外的垃圾收集器參數。 -
worker.childopts
: 工作進程的啟動選項,包括JVM參數。在給定的配置中,包括一些JVM參數,例如堆內存大小、GC日志的輸出路徑和格式、堆外內存溢出時的堆轉儲等。 -
ui.port
: Storm UI的端口號。在給定的配置中,端口號為8080。 -
ui.childopts
: Storm UI的啟動選項,包括JVM參數。在給定的配置中,只指定了最大堆內存大小為768MB。 -
topology.workers
: 拓撲的工作進程數。在給定的配置中,工作進程數為1,表示拓撲將在一個工作進程中執行。 -
topology.worker.shared.thread.pool.size
: 拓撲工作進程共享線程池的大小。在給定的配置中,線程池大小為4。 -
topology.worker.receiver.thread.count
: 拓撲工作進程接收器線程的數量。在給定的配置中,接收器線程數為1。 -
topology.worker.max.heap.size.mb
: 拓撲工作進程的最大堆內存大小,以MB為單位。在給定的配置中,最大堆內存大小為768MB。 -
topology.worker.logwriter.childopts
: 拓撲工作進程日志寫入器的啟動選項,包括JVM參數。在給定的配置中,只指定了最大堆內存大小為64MB。 -
topology.tuple.serializer
: 拓撲元組的序列化器。在給定的配置中,序列化器為"org.apache.storm.serialization.types.ListDelegateSerializer"。 -
topology.trident.batch.emit.interval.millis
: Trident拓撲批量發射間隔的時間間隔,以毫秒為單位。在給定的配置中,間隔為500毫秒。 -
topology.transfer.buffer.size
: 拓撲傳輸緩沖區的大小。在給定的配置中,緩沖區大小為1000。 -
topology.transfer.batch.size
: 拓撲傳輸批量大小。在給定的配置中,批量大小為1。 -
topology.stats.sample.rate
: 拓撲配置項解釋: -
worker.profiler.enabled
: 是否啟用工作進程的性能分析器。在給定的配置中,該值為false
,表示禁用性能分析器。 -
worker.profiler.command
: 用于啟動性能分析器的命令。在給定的配置中,命令為"flight.bash"。 -
worker.profiler.childopts
: 傳遞給性能分析器的JVM參數。在給定的配置中,參數為"-XX:+UnlockCommercialFeatures -XX:+FlightRecorder",用于解鎖商業特性并啟用Flight Recorder。 -
worker.metrics
: 工作進程的度量指標配置。提供了一組度量指標的名稱和相應的類。在給定的配置中,包括CGroup內存使用、CGroup內存限制、CGroup CPU使用、CGroup CPU保證等度量指標。 -
worker.max.timeout.secs
: 工作進程的最大超時時間,以秒為單位。在給定的配置中,超時時間為600秒。 -
worker.log.level.reset.poll.secs
: 重新設置工作進程日志級別的輪詢間隔,以秒為單位。在給定的配置中,輪詢間隔為30秒。 -
worker.heartbeat.frequency.secs
: 工作進程發送心跳的頻率,以秒為單位。在給定的配置中,心跳頻率為1秒。 -
worker.heap.memory.mb
: 工作進程的堆內存大小,以MB為單位。在給定的配置中,堆內存大小為768MB。 -
worker.gc.childopts
: 傳遞給垃圾收集器的JVM參數。在給定的配置中,參數為空字符串,表示沒有額外的垃圾收集器參數。 -
worker.childopts
: 工作進程的啟動選項,包括JVM參數。在給定的配置中,包括一些JVM參數,例如堆內存大小、GC日志的輸出路徑和格式、堆外內存溢出時的堆轉儲等。 -
ui.port
: Storm UI的端口號。在給定的配置中,端口號為8080。 -
ui.childopts
: Storm UI的啟動選項,包括JVM參數。在給定的配置中,只指定了最大堆內存大小為768MB。 -
topology.workers
: 拓撲的工作進程數。在給定的配置中,工作進程數為1,表示拓撲將在一個工作進程中執行。 -
topology.worker.shared.thread.pool.size
: 拓撲工作進程共享線程池的大小。在給定的配置中,線程池大小為4。 -
topology.worker.receiver.thread.count
: 拓撲工作進程接收器線程的數量。在給定的配置中,接收器線程數為1。 -
topology.worker.max.heap.size.mb
: 拓撲工作進程的最大堆內存大小,以MB為單位。在給定的配置中,最大堆內存大小為768MB。 -
topology.worker.logwriter.childopts
: 拓撲工作進程日志寫入器的啟動選項,包括JVM參數。在給定的配置中,只指定了最大堆內存大小為64MB。 -
topology.tuple.serializer
: 拓撲元組的序列化器。在給定的配置中,序列化器為"org.apache.storm.serialization.types.ListDelegateSerializer"。 -
topology.trident.batch.emit.interval.millis
: Trident拓撲批量發射間隔的時間間隔,以毫秒為單位。在給定的配置中,間隔為500毫秒。 -
topology.transfer.buffer.size
: 拓撲傳輸緩沖區的大小。在給定的配置中,緩沖區大小為1000。 -
topology.transfer.batch.size
: 拓撲傳輸批量大小。在給定的配置中,批量大小為1。 -
topology.stats.sample.rate
: 拓撲統計信息的
2.總結
本次我們將storm 使用docker 搭建了運行環境,下個章節,我們使用這個運行環境來運行我們拓撲。寫一個最簡單的 world count
。本次我們就先到這里,大家如果需要繼續可以開始寫拓撲,嘗試自己提交運行。
import org.apache.storm.Config;
import org.apache.storm.LocalCluster;
import org.apache.storm.topology.TopologyBuilder;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Values;
import org.apache.storm.utils.Utils;public class WordCountTopology {public static void main(String[] args) {// 創建TopologyBuilder實例TopologyBuilder builder = new TopologyBuilder();// 定義spout(數據源)和bolt(數據處理器)的名稱和任務并行度builder.setSpout("word-reader", new WordReaderSpout(), 1);builder.setBolt("word-normalizer", new WordNormalizerBolt(), 2).shuffleGrouping("word-reader");builder.setBolt("word-counter", new WordCounterBolt(), 2).fieldsGrouping("word-normalizer", new Fields("word"));// 創建配置對象并設置一些參數Config config = new Config();config.put("inputFile", "input.txt");config.setDebug(true);// 在本地模式下運行拓撲LocalCluster cluster = new LocalCluster();cluster.submitTopology("word-count-topology", config, builder.createTopology());// 等待一段時間后停止拓撲Utils.sleep(5000);cluster.killTopology("word-count-topology");cluster.shutdown();}
}
3.參考文檔
- docker hub storm https://hub.docker.com/_/storm
- Storm 社區 https://github.com/31z4/storm-docker