Storm源碼分析

Storm源碼分析

《Storm源碼分析》從原始碼的角度詳細分析了Storm的設計與實現,共分為三個部分,第一部分介紹了Storm的基本原理以及Storm集群系統的搭建方法,第二部分深入剖析了Storm的底層架構,如Nimbus、Supervisor、Worker以及Task,第三部分系統討論了Storm如何實現可靠的訊息傳輸,如Transaction Topology以及Trident。 《Storm源碼分析》適用於程式設計師、架構師以及計算機專業的學生。

內容簡介

微軟搜尋技術部門高級研發工程師實戰經驗分享

從原始碼的角度深入剖析Storm設計與實現

學習如何實現和高效利用“實時的Hadoop”

大數據處理是當前計算機科技的熱點,而流式實時大數據處理更是這皇冠上璀璨的明珠。實時流數據處理在搜尋引擎、社交網路、電商網站、廣告平台等領域有著相當廣泛的套用。Storm是極其高效、靈活、高擴展的流式數據處理平台。它被Twitter、Taobao、Yahoo、Groupon等公司採用。

本書由微軟公司網際網路工程院經驗豐富的一執行緒序員操刀編寫,包含很多實戰經驗和使用心得,很好地結合了代碼分析和套用實例。本書對於進行流式數據處理的研究、Storm的深入理解以及實際套用都有很好的參考價值。

作者簡介

李明 2001~2007年在哈爾濱工業大學完成本科以及碩士的學習。微軟搜尋技術部門資深研發工程師及高級開發經理,擅長Linux、Clojure、Java、C#等多種開發技術,長期致力於大數據、分散式系統的研究和套用,目前致力於實時性分散式處理系統的研究與開發。

王曉鵬 2004~2011年在北京郵電大學完成本科以及碩士的學習。微軟搜尋技術部門高級研發工程師,擅長Windows phonePhone、Silverlight、Clojure、Java、C#等多種開發技術,一直致力於大數據處理、分散式系統的研究和套用,目前致力於實時性分散式處理系統的研究與開發。

專業推薦

“本書從原始碼角度深入淺出地分析了Storm的設計及實現,一方面可以使讀者更好地了解並用好Storm技術,另一方面可以讓讀者學習如何設計大規模分散式系統,相信讀者一定會受益匪淺。”
——於偉,微軟資深開發總監
“書中對Storm的理解精闢透徹,對Storm的運用和各處細節也都闡述入微。尤其是對Storm的入門初學者來說,是一本不可多得的好書。”
——章英基,前微軟資深開發總監,現阿里巴巴資深總監
“本書由微軟公司網際網路工程院經驗豐富的一執行緒序員操刀編寫,包含很多實戰經驗和使用心得,很好地結合了代碼分析和套用實例。本書對於進行流式數據處理的研究、Storm的深入理解以及實際套用都有很好的參考價值。”
——王明雨,微軟資深開發工程師
“在工作期間,這本書對我幫助很大,即便對於像我這樣在分散式領域工作12年的老手來講,這本書仍然讓我受益良多。無論你是大數據領域、分散式系統的從業人員,還是開源系統的愛好者、開發者或網際網路從業人員,我認為這本書都值得仔細研讀。”
——賀軍,微軟資深項目經理
“本書從原始碼的度深入解讀了Storm技術。兩位作者為微軟公司網際網路工程院的一執行緒序員,擁有豐富的實戰經驗。本書不僅可以讓你全面了解Storm工作原理,深入洞悉Storm底層架構,還有助於你學習如何設計大規模分散式系統。”
——熊平,51CTO傳媒總裁

圖書目錄

第1章總體架構與代碼結構1
1.1Storm的總體結構1
1.2Storm的元數據3
1.2.1元數據介紹3
1.2.2Storm怎么使用這些元數據4
1.3Storm的代碼結構7
1.3.1Clojure代碼7
1.3.2Java代碼8
1.3.3Trident代碼9
1.3.4其他代碼10
第2章搭建Storm集群11
2.1搭建單機Storm集群11
2.2搭建多機Storm集群14
2.2.1設定環境14
2.2.2啟動Storm集群15
2.2.3提交Topology15
2.3WordCountTopology介紹15
2.3.1RandomSentenceSpout15
2.3.2SplitSentence16
2.3.3WordCount17
2.3.4WordCountTopology構建17
第3章Storm編程基礎19
3.1Fields定義19
3.2Tuple接口20
3.3常用聲明接口21
3.3.1配置聲明接口22
3.3.2輸入聲明接口23
3.3.3輸出欄位聲明接口24
3.3.4組件聲明接口25
3.4Spout輸出收集器25
3.4.1ISpoutOutputCollector和SpoutOutputCollector25
3.4.2Executor中ISpoutOutputCollector的實現27
3.5Bolt輸出收集器28
3.5.1IOutputCollector和OutputCollector28
3.5.2IBasicOutputCollector和BasicOutputCollector31
3.5.3BatchOutputCollector和BatchOutputCollectorImpl32
3.5.4Executor中的IOutputCollector實現34
3.6組件接口35
3.7Spout接口35
3.7.1ISpout36
3.7.2IRichSpout38
3.8Bolt接口38
3.8.1IBolt38
3.8.2IRichBolt40
3.8.3IBasicBolt40
3.8.4IBatchBolt42
3.8.5小結45
3.9Storm數據結構46
3.9.1GlobalStreamId46
3.9.2訊息分組方式46
3.9.3StreamInfo47
3.9.4ShellComponent47
3.9.5ComponentObject47
3.9.6ComponentCommon47
3.9.7SpoutSpec48
3.9.8Bolt48
3.9.9StormTopology49
3.9.10TopologySummary49
3.9.11SupervisorSummary49
3.9.12ClusterSummary50
3.9.13BoltStats50
3.9.14SpoutStats50
3.9.15統計信息50
3.9.16DRPC51
3.10基本Topology構建器52
3.10.1TopologyBuilder52
3.10.2ConfigGetter55
3.10.3SpoutGetter和BoltGetter55
3.10.4一個簡單例子56
3.11異常處理57
第4章基礎函式和工具類58
4.1計時器58
4.1.1mk—timer58
4.1.2check—active!60
4.1.3schedule60
4.1.4schedule—recurring60
4.1.5cancel—timer61
4.2async—loop61
4.3event—manager62
4.4even—sampler63
4.5ZooKeeper工具類64
4.5.1mk—client64
4.5.2create—node65
4.5.3get—data65
4.5.4進程內啟動ZooKeeper66
4.6LocalState66
4.7ClusterState68
4.8StormClusterState69
第5章通信機制71
5.1進程間通信71
5.1.1進程間通信協定71
5.1.2LocalCluster模式實現72
5.1.3分散式模式實現73
5.1.4協定使用75
5.2進程內通信77
5.2.1DisruptorQueue的使用77
5.2.2DisruptorQueue的Clojure處理器80
第6章Nimbus81
6.1Nimbus服務接口定義81
6.2Nimbus相關的數據結構83
6.2.1Java數據結構83
6.2.2Clojure數據結構84
6.3Nimbus中的執行緒介紹86
6.3.1mk—assignments87
6.3.2do—cleanup89
6.3.3clean—inbox90
6.4Topology狀態轉移90
6.4.1transition—name!90
6.4.2transition!91
6.4.3state—transitions92
6.5啟動Nimbus服務96
6.5.1launch—server!96
6.5.2service—handler97
6.6關閉Nimbus服務99
6.7主要服務方法99
6.7.1submitTopology99
6.7.2kill、rebalance、activate、deactivate方法101
6.7.3檔案上傳與下載102
6.7.4獲取UI所需的信息104
6.7.3獲取Topology106
6.7.6獲取Storm配置項107
6.8主要輔助方法107
6.8.1system—topology!107
6.8.2normalize—topology112
6.8.3compute—new—topology—>executor—>node+port114
6.8.4compute—executors117
第7章Scheduler119
7.1IScheduler接口119
7.2EvenScheduler120
7.2.1schedule—topolpgies—evenly120
7.2.2schedule—topology121
7.2.3get—alive—assigned—node+port—>executors122
7.2.4sort—slots123
7.3DefaultScheduler124
7.3.1default—schedule124
7.3.2slots—can—reassign126
7.3.3bad—slots126
7.4IsolationScheduler127
7.5調度示例131
7.5.1EvenScheduler和DefaultScheduler131
7.5.2IsolationScheduler134
第8章Scheduler137
8.1與Supervisor相關的數據結構137
8.1.1standalone—supervisor137
8.1.2Supervisor的數據138
8.1.3本地存儲數據139
8.2Supervisor中的執行緒140
8.2.1計時器執行緒140
8.2.2同步Nimbus任務的執行緒140
8.2.3管理Worker進程的執行緒143
8.3啟動Supervisor145
8.4關閉Supervisor147
8.5重要方法介紹147
8.5.1launch—worker147
8.5.2read—allocated—workers150
8.5.3wait—for—worker—launch151
8.5.4shutdown—worker152
8.5.5download—storm—code152
第9章Worker155
9.1Worker中的數據155
9.2Worker中的計時器157
9.2.1Worker的心跳157
9.2.2Executor的心跳158
9.2.3Worker中對ZMQ連線的維護159
9.2.4從ZooKeeper獲取Topology的活躍情況161
9.2.5小結162
9.3創建Worker163
9.4關閉Worker164
9.5重要輔助方法介紹165
9.5.1Worker中的接收函式166
9.5.2Worker中的傳送函式167
9.5.3獲取屬於Worker的Executor169
9.5.4創建Executor的接收訊息佇列和查找表169
9.5.5下載Topology的配置項以及代碼170
9.6小結171
第10章Executor172
10.1Executor的數據172
10.2Executor的輸入和輸出174
10.2.1Executor的輸入及處理174
10.2.2Executor的輸出及傳送175
10.3Spout類型的Executor176
10.3.1準備訊息循環的數據176
10.3.2Spout輸入處理函式178
10.3.3Spout訊息傳送函式180
10.3.4Spout對象的初始化181
10.3.5訊息循環182
10.4Bolt類型的Executor184
10.4.1準備訊息循環的數據184
10.4.2Bolt輸入處理函式184
10.4.3Bolt的訊息傳送函式185
10.4.4Bolt對象的初始化185
10.4.5訊息循環186
10.5創建Executor187
10.6輔助函式介紹188
10.6.1組件的Grouper函式188
10.6.2帶流量控制的錯誤報告方法193
10.6.3觸發系統Ticks194
10.7小結196
第11章Task198
11.1Task的上下文對象198
11.1.1TopologyContext198
11.1.2GeneralTopologyContext199
11.1.3WorkerTopologyContext200
11.1.4TopologyContext201
11.2創建Task數據202
11.3mk—tasks—fn函式204
11.4send—unanchored205
11.5創建Task206
11.6Storm中傳輸的訊息以及序列化206
第12章Storm的Ack框架208
12.1AckerBolt的實現分析209
12.2啟動訊息跟蹤211
12.3訊息跟蹤212
12.4Ack機制的例子214
第13章系統運行統計216
13.1基礎數據結構以及更新算法216
13.1.1滑動視窗的數據結構216
13.1.2滑動視窗的回調函式220
13.1.3滑動視窗集合的類型221
13.2Storm中的統計信息222
13.2.1Stats中定義的統計類別222
13.2.2運行統計的更新223
13.2.3運行統計的更新時間點223
13.2.4獲取統計數據228
13.3運行統計的Thrift結構229
第14章系統運行統計的另一種實現231
14.1內置統計信息的計算231
14.1.1MultiCountMetric232
14.1.2MultiReducedMetric233
14.2內置統計類型234
14.2.1Spout類型的內置統計235
14.2.2Bolt類型的內置統計235
14.3統計觸發訊息235
14.3.1註冊統計信息236
14.3.2觸發訊息的產生與傳送237
14.3.3處理統計觸發訊息238
14.4運行統計收集節點239
14.5SystemBolt241
第15章事務Topology的實現243
15.1事務Topology的實現概述243
15.1.1事務Topology的類型244
15.1.2事務Topology的類關係245
15.2ITransactionalSpout接口246
15.3協調Spout節點的執行器248
15.3.1ZooKeeper客戶端工具248
15.3.2協調Spout的執行器255
15.3.3訊息傳送Bolt的執行器261
15.4CoordinatedBolt的實現分析264
15.4.1TrackingInfo264
15.4.2CoordinatedOutput—Collector265
15.4.3CoordinatedBolt中的訊息類型267
15.4.4成員變數以及主要方法分析267
15.5分區的事務類型271
15.5.1分區的事務Spout接口271
15.5.2分區的事務Spout的執行器273
15.6分區的模糊事務Spout277
15.6.1分區的模糊事務Spout的接口277
15.6.2模糊的事務Spout執行器278
15.7事務Topology的構建器281
15.7.1構建器的構造函式及成員變數281
15.7.2設定Bolt對象283
15.7.3構建Topology284
15.7.4輸入流聲明器286
第16章事務Topology示例288
16.1例子代碼288
16.1.1分區的事務Spout288
16.1.2局部計數Bolt的實現291
16.1.3全局計數Bolt的實現292
16.2構建Topology293
16.3事務處理示例295
第17章Trident的Spout節點298
17.1ITridentSpout接口298
17.1.1BatchCoordinator接口299
17.1.2TridentSpoutCoordinator300
17.1.3MasterBatchCoordinator301
17.1.4訊息傳送節點接口306
17.1.5訊息傳送接口的執行器306
17.2適配IRichSpout接口307
17.3適配IBatchSpout接口311
17.4Trident中分區的Spout類型311
17.4.1分區Spout接口311
17.4.2分區Spout的執行器313
17.5模糊事務類型的Spout節點316
17.5.1模糊事務類型的Spout接口317
17.5.2模糊事務類型Spout的執行器317
17.6構建Spout節點320
17.6.1TridentTopology的newStream調用320
17.6.2TridentTopology中newDRPCStream調用321
第18章Trident的存儲322
18.1存儲的基本接口322
18.2MapState接口的實現323
18.2.1非事務類型的存儲324
18.2.2事務類型的存儲325
18.2.3模糊事務類型存儲327
18.3值的序列化方法329
18.4數據更新接口330
18.4.1CombinerValueUpdater330
18.4.2ReducerValueUpdater331
18.5存儲更新接口331
18.5.1ReducerAggStateUpdater332
18.5.2MapReducerAggStateUpdater332
18.5.3BaseStateUpdater334
18.6創建存儲對象334
第19章Trident訊息336
19.1ValuePointer336
19.2Factory接口及其實現337
19.2.1ProjectionFactory338
19.2.2FreshOutputFactory339
19.2.3OperationOutputFactory339
19.2.4RootFactory341
19.3訊息工廠的例子342
19.4TridentTupleView342
19.5ComboList343
第20章Trident操作與處理節點346
20.1操作的基本接口346
20.2Aggregator實現347
20.2.1GroupedAggregator348
20.2.2ChainedAggregatorImpl350
20.2.3SingleEmitAggregator353
20.3用戶接口及其實現355
20.3.1ReducerAggregator接口及其實現355
20.3.2CombinerAggregator接口及其實現356
20.4所有處理節點的上下文357
20.4.1單個處理節點的上下文358
20.4.2操作執行的上下文359
20.5Trident的輸出收集器359
20.5.1FreshCollector359
20.5.2CaptureCollector360
20.5.3GroupCollector360
20.5.4AppendCollector361
20.5.5AddIdCollector361
20.6Trident的處理節點362
20.6.1TridentProcessor接口363
20.6.2PartitionPersistProcessor363
20.6.3StateQueryProcessor365
20.7聚集器的執行367
第21章Trident流的基本操作370
21.1流的成員變數和基礎方法370
21.1.1流的成員變數370
21.1.2流節點名字370
21.1.3流的映射檢查372
21.1.4添加節點372
21.2流映射操作373
21.3流的分組操作374
21.4流的逐行操作374
21.5流的分區操作374
21.6流的單聚集器聚集操作376
21.7流的多聚集器聚集操作377
21.7.1ChainedAggregatorDeclarer377
21.7.2分區上的局部聚集操作379
21.7.3全局聚集操作379
21.7.4含有多個聚集器的partitionAggregate操作381
21.8流的聚集操作382
21.9流的分區寫入操作383
21.10查詢操作384
21.11流的全局寫入操作384
21.12流的操作與有向圖構建384
21.13分組流385
21.13.1成員變數385
21.13.2逐行操作385
21.13.3分組流的分區聚集操作386
21.13.4查詢操作386
21.13.5聚集操作386
21.13.6寫入操作387
21.14利用流操作來構建Topology的例子388
第22章Trident中流的互動操作392
22.1基本接口392
22.2JoinerMultiReducer393
22.2.1成員變數及構造函式393
22.2.2execute方法395
22.2.3complete方法397
22.3GroupedMultiReducerExecutor397
22.4MultiReducerProcessor399
22.5連線操作401
22.6流合併操作403
第23章Trident中的Bolt節點404
23.1SubTopologyBolt404
23.1.1輸入準備404
23.1.2成員變數405
23.1.3主要方法406
23.2Trident中的Bolt執行器409
23.2.1ITridentBatchBolt接口410
23.2.2TrackedBatch410
23.2.3定製的輸出收集器412
23.2.4訊息類型414
23.2.5數據成員分析414
23.2.6主要成員方法分析416
第24章Trident的執行最佳化420
24.1節點類型420
24.1.1基本節點類型420
24.1.2Spout節點422
24.1.3處理節點422
24.1.4分區節點423
24.2執行最佳化算法426
24.2.1節點組426
24.2.2節點組的合併算法427
24.2.3處理節點組中的分區節點431
24.2.4節點組以不同的方式收聽相同流431
24.2.5執行最佳化後的節點組434
24.2.6計算節點組的並行度434
第25章Trident與DRPC437
25.1DRPC伺服器438
25.1.1DRPC伺服器的成員變數438
52.1.2DRPC用戶接口及其實現439
25.1.3DRPCTopology端接口及其實現440
25.1.4啟動DRPC伺服器441
25.2DRPC的客戶端442
25.3DRPC中Spout節點443
25.4DRPCSpout的執行器446
25.5completeDRPC操作449
25.6返回DRPC結果451
第26章Trident的Topology構建器453
26.1基本工具函式453
26.1.1committerBatches453
26.1.2fleshOutStreamBatchIds453
26.1.3getOutputStreamBatchGroups454
26.2TridentTopologyBuilder455
26.2.1成員變數455
26.2.2設定Spout節點456
26.2.3設定Bolt節點458
26.3一個例子460
第27章多語言462
27.1ShellProcess462
27.2ShellBolt464
27.2.1成員變數464
27.2.2讀寫執行緒465
27.3ShellSpout467
第28章Storm中的配置項469

相關詞條

相關搜尋

熱門詞條

聯絡我們