
Storm源码分析
《Storm源码分析》从原始码的角度详细分析了Storm的设计与实现,共分为三个部分,第一部分介绍了Storm的基本原理以及Storm集群系统的搭建方法,第二部分深入剖析了Storm的底层架构,如Nimbus、Supervisor、Worker以及Task,第三部分系统讨论了Storm如何实现可靠的讯息传输,如Transaction Topology以及Trident。 《Storm源码分析》适用于程式设计师、架构师以及计算机专业的学生。
基本介绍
- 外文名:Standing on Shoulders of Giants
- 书名:Storm源码分析
- 作者:李明 王晓鹏
- 出版社:人民邮电出版社
- 页数:472页
- 开本:16
- 类型:科技
- 出版日期:2014年11月1日
- 语种:简体中文
- ISBN:7115371261
内容简介
微软搜寻技术部门高级研发工程师实战经验分享
从原始码的角度深入剖析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传媒总裁
——于伟,微软资深开发总监
“书中对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
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