本書(shū)共11章,分為三篇。基礎(chǔ)篇(第1~3章),介紹了Storm背景、基本原理、安裝部署、核心概念和數(shù)據(jù)流模型。實(shí)戰(zhàn)篇(第4~9章),通過(guò)6個(gè)典型的應(yīng)用案例和代碼示例,結(jié)合實(shí)踐技巧和理論知識(shí),深入講解了如何使用Storm設(shè)計(jì)大型數(shù)據(jù)應(yīng)用系統(tǒng)。技巧篇(第10~11章),重點(diǎn)介紹了Storm的高級(jí)特性、運(yùn)維監(jiān)控和性能調(diào)優(yōu)等,并結(jié)合生產(chǎn)系統(tǒng)的性能優(yōu)化、運(yùn)維經(jīng)驗(yàn)和使用技巧等方面進(jìn)行講解,旨在提升讀者的實(shí)際操作經(jīng)驗(yàn)。
前言
基礎(chǔ)篇
第1章認(rèn)識(shí)Storm
1.1什么是實(shí)時(shí)流計(jì)算
1.1.1實(shí)時(shí)流計(jì)算背景
1.1.2實(shí)時(shí)計(jì)算應(yīng)用場(chǎng)景
1.1.3實(shí)時(shí)計(jì)算處理流程
1.1.4實(shí)時(shí)計(jì)算框架
1.2Storm是什么
1.2.1Storm出現(xiàn)的背景
1.2.2Storm簡(jiǎn)介
1.2.3Storm的設(shè)計(jì)思想
1.2.4Storm與Hadoop的角色和組件比較
1.3Storm核心組件
1.3.1主節(jié)點(diǎn)Nimbus
1.3.2工作節(jié)點(diǎn)Supervisor
1.3.3協(xié)調(diào)服務(wù)組件ZooKeeper
1.3.4其他核心組件
1.4Storm的特性
1.5Storm的功能
1.6本章小結(jié)
第2章開(kāi)始使用Storm
2.1環(huán)境準(zhǔn)備
2.1.1系統(tǒng)配置
2.1.2安裝ZooKeeper集群
2.2啟動(dòng)模式
2.2.1本地模式
2.2.2分布式模式
2.3安裝部署Storm集群
2.3.1安裝Storm依賴(lài)庫(kù)
2.3.2安裝Storm集群
2.3.3啟動(dòng)Storm集群
2.3.4停止Storm集群
2.4創(chuàng)建Topology并向集群提交任務(wù)
2.4.1創(chuàng)建Topology
2.4.2向集群提交任務(wù)
2.5本章小結(jié)
第3章核心概念和數(shù)據(jù)流模型
3.1Tuple元組
3.1.1Tuple描述
3.1.2Tuple的生命周期
3.2Spout數(shù)據(jù)源
3.2.1Spout介紹
3.2.2Spout實(shí)例
3.3Bolt消息處理者
3.3.1Bolt介紹
3.3.2Bolt實(shí)例
3.4Topology拓?fù)?/p>
3.4.1Topology實(shí)例
3.4.2Topology運(yùn)行
3.5Stream消息流和StreamGrouping消息流組
3.5.1Stream消息流
3.5.2StreamGrouping消息流組
3.6Task任務(wù)
3.7Worker工作者進(jìn)程
3.8Worker、Task、Executor三者之間的關(guān)系
3.9事務(wù)
3.10數(shù)據(jù)流模型
3.10.1數(shù)據(jù)流模型簡(jiǎn)介
3.10.2Storm數(shù)據(jù)流模型
3.11本章小結(jié)
實(shí)戰(zhàn)篇
第4章實(shí)例1:移動(dòng)互聯(lián)--語(yǔ)音"實(shí)時(shí)墻"
4.1業(yè)務(wù)背景
4.1.1案例背景
4.1.2設(shè)計(jì)目標(biāo)
4.1.3數(shù)據(jù)格式
4.1.4硬件配置
4.2系統(tǒng)架構(gòu)與模塊設(shè)計(jì)
4.2.1整體架構(gòu)
4.2.2數(shù)據(jù)采集
4.2.3數(shù)據(jù)實(shí)時(shí)處理
4.2.4存儲(chǔ)設(shè)計(jì)
4.2.5Web實(shí)時(shí)展示
4.2.6硬件部署圖
4.3核心模塊實(shí)現(xiàn)
4.3.1實(shí)時(shí)處理業(yè)務(wù)邏輯實(shí)現(xiàn)
4.3.2Web展示實(shí)現(xiàn)
4.3.3最終效果呈現(xiàn)
4.4本章小結(jié)
第5章實(shí)例2:運(yùn)營(yíng)商--網(wǎng)絡(luò)流量流向?qū)崟r(shí)分析
5.1業(yè)務(wù)背景
5.1.1案例背景
5.1.2設(shè)計(jì)目標(biāo)
5.1.3數(shù)據(jù)規(guī)模預(yù)估
5.1.4數(shù)據(jù)格式
5.1.5統(tǒng)計(jì)分析需求
5.2系統(tǒng)架構(gòu)與模塊設(shè)計(jì)
5.2.1整體架構(gòu)
5.2.2數(shù)據(jù)源
5.2.3日志采集
5.2.4數(shù)據(jù)存儲(chǔ)
5.2.5數(shù)據(jù)處理
5.2.6目標(biāo)存儲(chǔ)和擴(kuò)展服務(wù)
5.2.7結(jié)果Web展示
5.3核心模塊實(shí)現(xiàn)
5.3.1模擬數(shù)據(jù)實(shí)現(xiàn)
5.3.2日志采集和存儲(chǔ)實(shí)現(xiàn)
5.3.3數(shù)據(jù)處理實(shí)現(xiàn)
5.3.4Web展示實(shí)現(xiàn)
5.4本章小結(jié)
第6章實(shí)例3:交通--基于GPS的實(shí)時(shí)路況分析
6.1業(yè)務(wù)背景
6.1.1案例背景
6.1.2設(shè)計(jì)目標(biāo)
6.1.3數(shù)據(jù)格式
6.1.4實(shí)時(shí)路況分析方法
6.2系統(tǒng)架構(gòu)和模塊設(shè)計(jì)
6.3核心模塊的實(shí)現(xiàn)
6.3.1安裝Kafka集群
6.3.2Flume整合Kafka
6.3.3實(shí)時(shí)處理數(shù)據(jù)
6.3.4Web頁(yè)面展示
6.4本章小結(jié)
第7章實(shí)例4:互聯(lián)網(wǎng)--數(shù)據(jù)質(zhì)量實(shí)時(shí)監(jiān)控
7.1業(yè)務(wù)背景
7.1.1案例背景
7.1.2設(shè)計(jì)目標(biāo)
7.1.3數(shù)據(jù)格式
7.2系統(tǒng)架構(gòu)與模塊設(shè)計(jì)
7.2.1整體架構(gòu)
7.2.2結(jié)果Web展示
7.3核心模塊實(shí)現(xiàn)
7.3.1模擬數(shù)據(jù)
7.3.2實(shí)時(shí)處理業(yè)務(wù)邏輯的實(shí)現(xiàn)
7.3.3Web界面實(shí)現(xiàn)
7.3.4最終效果圖
7.4本章小結(jié)
第8章實(shí)例5:交通--超速頻發(fā)路段監(jiān)控
8.1業(yè)務(wù)背景
8.1.1案例背景
8.1.2數(shù)據(jù)類(lèi)型
8.2系統(tǒng)架構(gòu)和模塊設(shè)計(jì)
8.3核心模塊實(shí)現(xiàn)
8.3.1實(shí)現(xiàn)入口類(lèi)Main
8.3.2數(shù)據(jù)源SocketSpout的實(shí)現(xiàn)
8.3.3實(shí)時(shí)處理MapSearchBolt和SpeedProcessBolt的實(shí)現(xiàn)
8.3.4目標(biāo)存儲(chǔ)DataBaseLoadBolt的實(shí)現(xiàn)
8.4本章小結(jié)
第9章實(shí)例6:互聯(lián)網(wǎng)--廣告實(shí)時(shí)流量統(tǒng)計(jì)
9.1廣告實(shí)時(shí)流量統(tǒng)計(jì)系統(tǒng)架構(gòu)
9.1.1廣告數(shù)據(jù)
9.1.2詳細(xì)需求描述
9.1.3系統(tǒng)架構(gòu)
9.2表結(jié)構(gòu)與模塊設(shè)計(jì)
9.2.1表結(jié)構(gòu)設(shè)計(jì)
9.2.2功能模塊設(shè)計(jì)
9.3核心模塊實(shí)現(xiàn)
9.3.1部署物理集群環(huán)境
9.3.2Kafka生產(chǎn)者邏輯的實(shí)現(xiàn)
9.3.3使用Stormkafka實(shí)現(xiàn)業(yè)務(wù)邏輯
9.3.4使用HBase存儲(chǔ)并實(shí)現(xiàn)統(tǒng)計(jì)
9.4本章小結(jié)
技巧篇
第10章Storm常見(jiàn)故障及解決方法
10.1安裝部署故障
10.1.1"nojzmqinjava.library.path"異常
10.1.2"Noruletomaketarget"異常
10.1.3"cannotaccessorg.zeromq.ZMQ"異常
10.1.4缺少pkgconf?ig異常
10.1.5"java.lang.Unsatisf?iedLinkError"異常
10.1.6"java.lang.NoClassDefFoundError:clojure.core.protocols$"異常
10.1.7"Error:cannotlinkwithluuid,installuuiddev"異常
10.1.8"badinterpreter:Nosuchf?ileordirectory"異常
10.1.9"org.zeromq.ZMQException:Invalidargument"異常
10.2啟動(dòng)故障
10.2.1"java.io.FileNotFoundException"異常
10.2.2"java.io.EOFException"異常
10.3運(yùn)行時(shí)故障
10.3.1"Nimbushostisnotset"異常
10.3.2"AlreadyAliveException(msg:xxxisalreadyactive)"異常
10.3.3無(wú)法序列化log4j.Logger異常
10.3.4"Failingmessage"異常
10.3.5"java.io.NotSerializableException"異常
10.3.6"java.lang.NoClassDefFoundError"異常
10.3.7"java.net.NoRouteToHostException"異常
10.3.8"java.net.UnknownHostException"異常
10.3.9重復(fù)defaults.yaml資源文件異常
10.3.10"KeeperException$NoNodeException"異常
10.3.11"AfatalerrorhasbeendetectedbytheJavaRuntimeEnvironment"錯(cuò)誤
10.3.12"java.lang.ArrayIndexOutOfBoundsException"異常
10.3.13DRPC空指針異常
10.3.14StormThrift讀取數(shù)據(jù)報(bào)錯(cuò)
10.4本章小結(jié)
第11章Storm使用技巧和實(shí)踐
11.1核心組件使用要點(diǎn)
11.1.1Spout和Bolt
11.1.2ZooKeeper集群盡量獨(dú)立
11.1.3Thrift服務(wù)的應(yīng)用場(chǎng)景
11.1.4序列化機(jī)制的使用場(chǎng)景
11.2集群配置技巧
11.2.1默認(rèn)參數(shù)配置
11.2.2日志信息
11.2.3合理配置JVM參數(shù)
11.3集群運(yùn)維技巧
11.3.1Storm計(jì)算結(jié)果的存儲(chǔ)位置
11.3.2Storm集群動(dòng)態(tài)增刪節(jié)點(diǎn)
11.3.3關(guān)閉Storm相關(guān)進(jìn)程
11.3.4StormUI顯示內(nèi)容的問(wèn)題
11.4項(xiàng)目開(kāi)發(fā)技巧
11.4.1使用assembly插件打包
11.4.2依賴(lài)JAR沖突
11.5保障消息的處理
11.5.1消息失敗后的處理
11.5.2主動(dòng)干預(yù)性
11.5.3處理重復(fù)的Tuple
11.6理解DRPC原語(yǔ)
11.6.1DRPC工作流
11.6.2LinearDRPCTopologyBuilder實(shí)現(xiàn)類(lèi)
11.6.3DRPC的兩種模式
11.7快速理解一致性事務(wù)
11.7.1Trident框架的使用
11.7.2Trident框架的細(xì)節(jié)
11.7.3事務(wù)性Spout
11.7.4狀態(tài)State
11.8本章小結(jié)