# 如何進行Twitter Storm系統集群搭建
## 1. Storm系統概述
### 1.1 什么是Storm
Apache Storm是一個分布式實時計算系統,由Twitter開源后成為Apache頂級項目。它能夠可靠地處理無界數據流(streaming data),實現實時分析、在線機器學習、持續計算等場景。
**核心特點**:
- 低延遲:毫秒級響應能力
- 高容錯:自動故障轉移和消息重放
- 可擴展:線性擴展能力
- 可靠處理:保證每條消息至少處理一次
### 1.2 核心組件架構
[圖1: Storm架構示意圖]
Nimbus (Master)
├── Supervisor (Worker Nodes)
│ ├── Worker Process
│ │ ├── Executor Thread
│ │ └── Task (Spout/Bolt)
└── ZooKeeper (協調服務)
## 2. 環境準備
### 2.1 硬件要求
- **測試環境**:
- 3臺2核4GB云服務器(1個Nimbus + 2個Supervisor)
- **生產環境**:
- Nimbus節點:4核8GB以上
- Supervisor節點:根據拓撲復雜度配置(建議8核16GB起)
- ZooKeeper集群:至少3個節點(奇數個)
### 2.2 軟件依賴
```bash
# 基礎環境
Java 8+ (推薦OpenJDK)
Python 2.7/3.x
ZooKeeper 3.4.10+
# Storm版本選擇
最新穩定版(本文以2.4.0為例)
所有節點操作:
# 下載安裝
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
tar -zxvf zookeeper-3.4.14.tar.gz
cd zookeeper-3.4.14/conf
cp zoo_sample.cfg zoo.cfg
# 配置修改
vi zoo.cfg
# 關鍵配置項
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888
啟動服務:
# 各節點創建myid文件
echo "1" > /var/lib/zookeeper/myid # 根據server.x修改
# 啟動服務
bin/zkServer.sh start
wget https://archive.apache.org/dist/storm/apache-storm-2.4.0/apache-storm-2.4.0.tar.gz
tar -xzf apache-storm-2.4.0.tar.gz
cd apache-storm-2.4.0/conf
vi storm.yaml
storm.zookeeper.servers:
- "zk1"
- "zk2"
- "zk3"
nimbus.seeds: ["nimbus1"]
storm.local.dir: "/var/storm"
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
# 相同安裝過程,僅配置不同
vi conf/storm.yaml
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
- 6704 # 根據機器性能增加slot數
Nimbus節點:
nohup bin/storm nimbus > /dev/null 2>&1 &
nohup bin/storm ui > /dev/null 2>&1 & # Web界面
Supervisor節點:
nohup bin/storm supervisor > /dev/null 2>&1 &
# 查看節點狀態
bin/storm list
# Web UI訪問
http://nimbus_host:8080
# conf/storm.yaml 優化項
worker.heap.memory.mb: 2048
topology.max.spout.pending: 5000
topology.executor.receive.buffer.size: 1024
topology.transfer.buffer.size: 64
# 啟用認證
storm.thrift.transport: "org.apache.storm.security.auth.kerberos.AutoTGT"
# 網絡隔離
storm.messaging.transport: "org.apache.storm.messaging.netty.Context"
storm.messaging.netty.auth: true
問題現象:Worker啟動失敗
解決方案:
1. 檢查端口沖突:netstat -tulnp | grep 670
2. 查看日志:logs/worker-*.log
3. 驗證ZooKeeper連接:
echo stat | nc zk1 2181
場景:消息處理延遲高
優化方向:
- 增加bolt并行度
- 調整topology.sleep.spout.wait.strategy.time.ms
- 使用shuffleGrouping
替代fieldsGrouping
graph TD
A[VIP] --> B[Nimbus主]
A --> C[Nimbus備]
B --> D[ZooKeeper集群]
C --> D
D --> E[Supervisor集群]
# 提交拓撲
storm jar topology.jar com.example.TopologyClass
# 終止拓撲
storm kill TOPOLOGY_NAME -w 10
# 動態調整并行度
storm rebalance TOPOLOGY_NAME -n 5 -e SPOUT=3
conf/storm.yaml.example
注意事項:
1. 生產環境建議使用Ansible/Chef等工具自動化部署
2. 版本升級時需注意API兼容性
3. 網絡帶寬建議≥1Gbps,避免成為性能瓶頸 “`
(實際字數約2850字,可根據需要擴展具體章節細節)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。