首页>参考读物>公共基础课>心理生活

Storm应用实践:实时事务处理之策略
作者 : [美] 肖恩 T.艾伦(Sean T. Allen) 马修•扬科夫斯基(Matthew Jankowski) 彼得•巴蒂罗纳(Peter Pathirana) 著
译者 : 罗聪翼 龚成志 译
丛书名 : 大数据技术丛书
出版日期 : 2017-12-27
ISBN : 978-7-111-58621-0
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 248
开本 : 16
原书名 : Storm Applied: Strategies for real-time event processing
原出版社: Waterside Productions,Inc.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

图书特色

这是一本基于生产环境指导使用 Storm 的实践应用指南!作者将TheLadders的项目实践经验融入本书,无论是刚接触 Storm 的新人,还是拥有丰富经验的开发者,都可以通过书中基于 Storm不同类型的应用案例演示,习得Storm 的核心概念,以及如何基于生产环境对 Storm 集群做优化、调试和故障排查。

通过阅读本书,你将学到:
Storm核心概念,包括拓扑、元祖、流、Spout、Blot和流分组策略
如何设计健壮的拓扑,以及其从本地到远程的实现
学会应用Storm UI以及其他工具优化Storm
Storm中的资源冲突以及解决方案
深入理解 Storm 的内核原理
Trident的核心功能和应用

作者简介
肖恩 T.艾伦(Sean T. Allen)
现为Wallaroo Labs架构副总裁,之前曾担任TheLadders首席架构师。他专注于开发弹性、可扩展、能够移动核心业务指标的系统。他在软件行业从业20多年,拥有丰富的领域经验,能够创建灵活的数据工作流、分布式系统和基于SOA的应用框架。

马修·扬科夫斯基(Matthew Jankowski)
BAMTECH Media高级软件工程师,有15年软件系统开发经验。之前任职于TheLadders公司,花费两年时间将Storm集成到TheLadders,并搜索新的Storm用例。

彼得·巴蒂罗纳(Peter Pathirana)
现为Flatiron Health资深软件工程师,之前是 TheLadders高级软件工程师,在为复杂问题设计全面解决方案方面有丰富的经验,乐于钻研Storm、Elasticsearch、 Solr和RabbitMQ等。

图书前言

在TheLadders,我们从Storm刚发布时就开始使用(那时的版本号还是0.5.x)。刚开始,我们只在一些非关键的业务流程上部署Storm,在很长的一段时间里,我们的Storm集群都一直处于持续运行的状态,且十分稳定。正因为没出过什么问题,所以我们也没花太多的心思在上面。直到需要应对更多业务时,我们意识到Storm刚好是最合适的解决方案,可结果在实施的过程中暴露出了各种各样的问题。例如,我们需要在生产环境中去应对资源争夺,缺乏对底层运行原理的充分认知,不断寻找优化性能的次优方案,面临缺少可视化的系统运行状态监控,等等。
这促使我们花费大量的时间和精力去研究本书中即将呈现的内容。在学习理解Storm的过程中,我们多次翻阅了所有可找得到的文档,深入研究相关源代码,整理最适合的Storm解决方案,不断总结“最佳实践”,并且我们还增加了自定义的监控系统,便于更有效地排查故障和优化方案。
你可以在网上轻松查到有关Storm的原理文档,但我们发现,市面上依然缺少可以基于生产环境,指导使用Storm的实践应用文档。我们为此在博客上撰写了大量有关Storm的使用经验,所以当Manning找到我们希望合作一本Storm书籍时,大家一拍即合。我们有太多的知识想和大家一起分享,希望可以帮助大家少走我们曾走过的弯路,避开一些我们曾踩过的坑。
虽然我们分享出来的内容主要是基于在生产环境中,如何对Storm集群做优化、调试和故障排查,但我们更希望强调这里对Storm原理所需要的深入理解,同时展示出Storm的灵活性和广泛适用性,即使我们仅能代表众多使用Storm公司中的一员。
在本书中,我们将尽可能演示基于Storm下不同类型的应用案例,讲解Storm的核心概念,以便更容易理解如何在生产环境中执行优化、调试和故障排查。希望这种形式能适用于不同层次的读者,无论是刚接触Storm的新人,还是拥有丰富经验而且遇到过和我们有相似经历的开发者。
本书绝对是一个团队协作的结晶,无论是来自Manning的伙伴,还是来自TheLadders的同事,大家都从最开始就尽可能地支持我们,耐心地协助我们完成测试和验证所有想法。
无论你的Storm使用经验处于什么样的层次,都希望本书能对你有所帮助,我们也很享受撰写本书的过程,因为每一天我们都学到了更多关于Storm的知识。

上架指导

计算机科学/大数据分析与处理

封底文字

这是一本基于生产环境指导使用 Storm 的实践应用指南!作者将TheLadders的项目实践经验融入本书,无论是刚接触 Storm 的新人,还是拥有丰富经验的开发者,都可以通过书中基于Storm不同类型的应用案例演示,习得Storm 的核心概念,以及如何基于生产环境对Storm集群做优化、调试和故障排查。

通过阅读本书,你将学到:
• Storm核心概念,包括:拓扑、元祖、流、Spout、Blot以及流分组策略
• 如何设计健壮的拓扑,以及其从本地到远程的实现
• 学会应用Storm UI以及其他工具优化Storm
• Storm中的资源冲突以及解决方案
• 深入理解 Storm 的内核原理
• Trident的核心功能和应用

译者序

大数据和物联网创业的时机已经越来越成熟,大数据相关技术也呈现出贬值效应,但这里说的贬值不是指不去钻研带来的落后,而是技术不再成为这个行业的独门利器。成熟的技术和方案已经降低了这个行业的准入门槛,我们要做的就是赶紧抓住机会切入互联网创业的下半场。
如果互联网的上半场是基于人口红利和流量红利在广度上进行扩展,那么下半场就应该将焦点放在深度扩展上。在面对业务去寻找解决方案的时候,我们本质上要做的应该是理解问题、提出问题,这是最难的事情,因为只有好的问题才能找到好的答案,然后才是如何用数据来实现解决问题的路径。所以学会如何分析和利用大数据对业务产生帮助才是关键,也就是说,要想提出好问题是非常困难的,通俗点讲就是要学会化繁为简。
在物联网行业中,数据扮演的角色是推动服务和功能,提供判断和解决问题的支撑。工业互联网对数据的低容错性和高实时性要求,让数据的价值拥有短期和长期之分。短期来讲,数据给予了最传统的统计和分析价值,比如基于单变量的描述性分析和多维度的分类聚合应用,在同方云我们常将这类数据应用于一些大型装备的维保支撑,开发的远程诊断工具提高了过程控制的效率。但大数据真正的价值发挥还需要更大的能量,积累的越多,可以挖掘的价值才越大,只有通过长期地反复尝试和对目标问题的调整,才能发现业务发展的规律,让数据在未来的预测上发挥其长期价值。所以团队中我们常说的一句话,就是“大数据不是告诉你1000台风机在做什么,而是应该告诉你第1001台风机在哪里”。
因此,大数据真正的机会是学会如何分析和使用数据,让其释放和体现自身的价值,而不是因为用了多么先进的技术和复杂的算法,才能发挥它的价值。我的统计学老师曾告诉我:“事物发展背后的逻辑永远是最简单的,统计学发展这么多年,就没有出现过复杂算法战胜了简单算法,没有简单的模型就没有复杂的模型,由大到小,才是分治递归的基础。”
所以本书最好的一点,就是用最简单的语言把问题讲清楚,帮助你理解并学会使用Storm来辅助解决实际中遇到的问题,基于详尽的案例讲解,覆盖Storm最有效的应用场景,支撑你在选型上做出合理的判断。以授之以渔的方式,让你在技术与业务之间游刃有余,将更多的精力放在问题定义和数据分析上。本书倡导的就是要学会以“What”而不是“How”的策略来思考问题,把那些计算和处理的过程都交给Storm来代劳吧!
感谢机械工业出版社华章分社的副总编杨福川先生对本书的高度重视,感谢责编王春华和唐晓琳老师的日夜工作,提高了本译著的整体翻译质量,本书出版过程中参与服务的还有多位台前幕后的工作人员,对此予以特别感谢!
感谢和我一同翻译本书的龚成志先生,他对技术的热爱和严谨支撑了本书的专业性,也很荣幸能和他一起共事。感谢我的妻子李洁,在过去的几个月中支持我的翻译工作,帮助我完成了大量的审阅工作,还有在此期间出生的可爱女儿雪桐,感谢她活泼可爱的笑容,消除了我一切的疲惫。感谢父母家人对我的鼓励,感谢同方云计算的领导对我的信任,感谢我的团队陪我一起度过多少次不知白天与黑夜的攻关和冲刺!
虽然我已经竭尽全力尽量准确地描述书中的技术要点,也进行了多轮的审校和通读,但仍难免有疏漏之处,如读者发现任何不理想之处,望能不吝赐教。

罗聪翼
2017年8月成都

2016年我主导了一个物联网项目:重型采矿设备的实时监控系统,需要对工业流数据进行实时处理,主要是对大型设备的各项状态数据进行过滤以及计算。设计之初我选择使用Kafka作为数据总线,并用Kafka的消费接口直接订阅消息完成计算处理。最开始的时候由于单机数据量比较小,并且只接入了几十台设备,业务逻辑也相对简单,只是简单的状态监控,一切计算都处理得称心得手,系统状态表现得非常良好稳定。
不过随着业务的发展,接入设备量越来越多,监控点位增多以及监控频次的需求提升,数据量越来越大,业务逻辑也开始越来越复杂,而此时我们才意识到当初低估了这些重型工业设备!整个系统的并发性能出现了严重的问题,并且代码也越来越难以维护,必须将整个系统进行重构。
在做方案调研时,复盘了之前流数据在实际业务中带来的压力和困难,我决定重新选择一个实时流处理框架,并且要求在重构结束后能保证业务的平滑迁移。这时市面上可供选择的实时计算框架已经有很多种了,经过初步调研发现,Storm提供的功能应该正是我所需要的:一个可扩展的高性能流式处理框架!
在重构期间,我从公司的书架上翻到了本书的原版英文书,阅读之后发现,其从实际案例出发,由简到繁,逐步深入和清晰地讲解了Storm的相关概念,以及如何有效地借助Storm解决现实中的问题。书中的案例帮助我快速地理解了Storm的各个技术要点,而且恰好还解决了当时遇到的一些实际问题。在这本书的帮助下,团队顺利完成了整个系统的重构工作,到目前为止,系统的性能与稳定性还没有发现太大的问题,达到了重构的预期效果。所以当好友罗聪翼邀请我一同参与本书的翻译工作时,我义不容辞地答应了他!
如果你先放下本书,退远一步以上帝视角来看目前的计算机应用,就会发现大数据在整个信息技术中其实越来越抢眼,Storm已经成为主流的流式数据处理技术之一,但凡一提到流式处理,大家都会想到Storm。
所以为了让读者更容易跟上技术的发展潮流,本书尽可能采取通俗易懂的方式,不讲高深的概念,从实际例子出发,逐步加深你对Storm的理解。正是如此,每读完一章你都能更进一步认识Storm的各项技术要点,逐步学会如何使用Storm解决实际问题。当完成整本书的阅读后,你就应该能够解决足够复杂的流式计算相关问题了。
另外,本书还结合了代码驱动的学习方法,对Storm技术进行了操作讲解,从最开始的概念到后面的案例解析,都是逐步展开的,让读者在循序渐进的实际操作中巩固知识点,哪怕你从来都没有接触过流式处理,也能在练习中逐步掌握Storm的相关知识。所以建议对于没有接触过Storm的读者,一定要从第1章开始顺序学习,并对每段代码都要运行一次,千万别跳过这些步骤!
在此我要特别感谢我的这位朋友,也就是本书另外一位译者罗聪翼,感谢他邀请我一起参与本书的翻译工作。我在翻译过程中由于各种原因曾多次想放弃,正因为他的鼓励和支持,我才能完成全部的翻译工作。

龚成志
2017年8月

图书目录

译者序

前言
致谢
关于本书
关于原书封面插图
第1章 Storm简介 1
1.1 什么是大数据 1
1.1.1 大数据的四大特性 2
1.1.2 大数据工具 3
1.2 Storm如何应用于大数据应用场景 5
1.3 为什么你希望使用Storm 9
1.4 小结 10
第2章 Storm核心概念 11
2.1 问题定义:GitHub提交数监控看板 11
2.1.1 数据:起点和终点 12
2.1.2 分解问题 12
2.2 Storm基础概念 13
2.2.1 拓扑 13
2.2.2 元组 15
2.2.3 流 16
2.2.4 spout 17
2.2.5 bolt 18
2.2.6 流分组 20
2.3 在Storm中实现GitHub提交数监控看板 22
2.3.1 建立一个Storm工程 22
2.3.2 实现spout 23
2.3.3 实现bolt 26
2.3.4 集成各个部分组成拓扑 29
2.4 小结 30
第3章 拓扑设计 31
3.1 拓扑设计方法 32
3.2 问题定义:一个社交热力图 32
3.3 将解决方案映射至Storm的逻辑 33
3.3.1 考虑数据流本身施加的要求 33
3.3.2 将数据点表示为元组 34
3.3.3 确定拓扑组成的步骤 35
3.4 设计的初步实现 38
3.4.1 spout:从数据源读取数据 38
3.4.2 bolt:连接至外部服务 39
3.4.3 bolt:将数据寄放在内存里 41
3.4.4 bolt:持久化存储到数据库 45
3.4.5 定义组件间的流分组策略 47
3.4.6 在本地集群模式中构建一个拓扑 48
3.5 扩展拓扑 49
3.5.1 理解Storm中的并行机制 50
3.5.2 调整拓扑配置来解决设计中遗留的瓶颈 54
3.5.3 调整拓扑以解决数据流中固有的瓶颈 60
3.6 拓扑的设计范式 63
3.6.1 分解为功能组件的设计方法 65
3.6.2 基于重分配来分解组件的设计方法 65
3.6.3 最简单的功能组件与最少的重分配次数 69
3.7 小结 70
第4章 设计健壮的拓扑 71
4.1 对可靠性的要求 71
4.2 问题定义:一个信用卡授权系统 72
4.2.1 有重试特性的概念性解决方案 72
4.2.2 定义数据点 74
4.2.3 在Storm上实现带有重试特性的方案 74
4.3 bolt基础实现 76
4.3.1 AuthorizeCreditCard的实现 76
4.3.2 ProcessedOrderNotification的实现 77
4.4 消息处理保障 78
4.4.1 元组状态:处理完成或失败 78
4.4.2 bolt中的锚定、应答和容错 80
4.4.3 spout在消息处理保障中的角色 84
4.5 回放语义 87
4.5.1 Storm中可靠性的级别 87
4.5.2 在Storm拓扑中检查仅一次处理 88
4.5.3 检查拓扑中的可靠性保障 89
4.6 小结 94
第5章 拓扑由本地到远程的实施 95
5.1 Storm集群 96
5.1.1 解析工作结点 98
5.1.2 基于信用卡授权拓扑的上下文来理解工作结点 99
5.2 Storm集群容错中的快速失败机制 100
5.3 安装Storm集群 101
5.3.1 配置Zookeeper集群 101
5.3.2 在 Storm 的主结点和工作结点上安装依赖组件 102
5.3.3 安装Storm到主结点和工作结点 102
5.3.4 通过storm.yaml配置主结点和工作结点 102
5.3.5 在监督机制下启动Nimbus和Supervisor 103
5.4 在Storm集群上运行拓扑 104
5.4.1 重新考虑如何将拓扑组件组合在一起 104
5.4.2 在本地模式下运行拓扑 105
5.4.3 在一个远程 Storm 集群上运行拓扑 105
5.4.4 在一个远程Storm集群上部署拓扑 106
5.5 Storm UI及其在集群中的角色 107
5.5.1 Storm UI:Storm集群概要 107
5.5.2 Storm UI:独立拓扑概要 111
5.5.3 Storm UI:独立spout/bolt概要 115
5.6 小结 118
第6章 对Storm进行调优 120
6.1 问题定义:Daily Deals!重生版 121
6.1.1 创建概念性解决方案 121
6.1.2 将方案转换为Storm设计 122
6.2 初始化实施 122
6.2.1 spout:读取自一个数据源 124
6.2.2 bolt:查找推荐商品 125
6.2.3 bolt:为每个商品查询详细信息 126
6.2.4 bolt:保存推荐的商品详情 127
6.3 调优:我想为它提速 128
6.3.1 Storm UI:调优的定位工具 128
6.3.2 为性能值建立一个基线集 130
6.3.3 判断瓶颈 131
6.3.4 spout:控制数据流入拓扑的速率 135
6.4 延迟率:当外部系统依然能正常工作时 137
6.4.1 在拓扑中模拟延迟 137
6.4.2 延迟的外因和内因 139
6.5 Storm的指标统计API 143
6.5.1 使用Storm的内建
CountMetric 143
6.5.2 设置一个指标接收器 144
6.5.3 创建一个自定义的SuccessRateMetric 145
6.5.4 创建一个自定义的MultiSuccessRateMetric 147
6.6 小结 149
第7章 资源冲突 150
7.1 调整一个工作结点上运行的工作进程数量 152
7.1.1 问题 152
7.1.2 解决方案 152
7.1.3 讨论 153
7.2 修改工作进程(JVM)上的内存分配 153
7.2.1 问题 153
7.2.2 解决方案 154
7.2.3 讨论 154
7.3 定位拓扑上运行的工作结点/进程 154
7.3.1 问题 154
7.3.2 解决方案 155
7.3.3 讨论 155
7.4 在一个Storm集群中的工作进程冲突 156
7.4.1 问题 157
7.4.2 解决方案 157
7.4.3 讨论 158
7.5 在一个工作进程(JVM)中的内存冲突 159
7.5.1 问题 162
7.5.2 解决方案 162
7.5.3 讨论 162
7.6 在一个工作结点上的内存冲突 163
7.6.1 问题 165
7.6.2 解决方案 165
7.6.3 讨论 165
7.7 工作结点的CPU资源冲突 165
7.7.1 问题 166
7.7.2 解决方案 166
7.7.3 讨论 168
7.8 工作结点的I/O冲突 168
7.8.1 网络/Socket层面的I/O冲突 169
7.8.2 磁盘I/O冲突 171
7.9 小结 172
第8章 Storm内核 174
8.1 重新考虑提交数的拓扑设计 175
8.1.1 回顾拓扑的设计 175
8.1.2 假设该拓扑运行在远程Storm集群上 176
8.1.3 数据是如何在集群的spout和bolt之间传输的 176
8.2 探究执行器的细节 177
8.2.1 监听提交数数据源spout的执行器细节 177
8.2.2 在同一个JVM中两个执行器之间传输元组 178
8.2.3 提取email bolt的执行器细节 179
8.2.4 在不同JVM上的两个执行器之间传输元组 180
8.2.5 email计数bolt的执行器细节 182
8.3 路由和任务 183
8.4 当Storm的内部队列出现溢出时 185
8.4.1 内部队列的类型和可能出现溢出的情况 185
8.4.2 使用Storm的debug日志来诊断缓冲区溢出 186
8.5 处理Storm内部缓冲区溢出问题 187
8.5.1 调整生产与消耗的比例 187
8.5.2 提升所有拓扑的缓冲区大小 187
8.5.3 提升指定拓扑的缓冲区大小 188
8.5.4 spout的最大待定数 188
8.6 调整缓冲区大小来提升性能 189
8.7 小结 190
第9章 Trident 191
9.1 什么是Trident 192
9.1.1 Trident中不同的操作方法 193
9.1.2 将Trident数据流看作批数据 195
9.2 Kafka及其在Trident中的角色 195
9.2.1 解构Kafka的设计 195
9.2.2 Kafka与Trident的匹配度 198
9.3 问题定义:网络电台应用 199
9.3.1 定义数据点 200
9.3.2 将问题进行步骤划分 200
9.4 基于一个Trident拓扑来实现网络电台的设计 200
9.4.1 实现一个Trident的Kafka spout 202
9.4.2 对播放日志做反序列化操作,并分别创建每个字段的独立数据流 203
9.4.3 将艺术家、歌曲名和标签进行统计计数和持久化操作 207
9.5 借助DRPC访问持久化的统计结果 212
9.5.1 创建一个DRPC流 212
9.5.2 向流中应用一个DRPC状态查询 213
9.5.3 借助DRPC客户端发起一个DRPC调用 214
9.6 将Trident的操作符映射至Storm的原语 215
9.7 扩展一个Trident拓扑 220
9.7.1 实现并行性的分区 221
9.7.2 Trident数据流中的分区 221
9.8 小结 224
编后记 226

教学资源推荐
作者: [美] 霍华德·S. 弗里德曼(Howard S. Friedman) 米利亚姆·W. 舒斯塔克(Miriam W. Schustack) 著
作者: (美)埃略特·阿伦森(Elliot Aronson)加利福尼亚大学圣克鲁兹分校 提摩太 D. 威尔逊(Timothy D. Wilson) 弗吉尼亚大学 罗宾 M.埃克特 (Robin M. Akert)威尔士利学院 著
作者: (美) 布雷特 W.佩勒姆(Brett W.Pelham)纽约州立大学布法罗分校 哈特·布兰顿(Hart Blanton)得克萨斯A&M大学 著
作者: (美)保罗 E. 斯佩克特(Paul E. Spector)
参考读物推荐
作者: [美] 艾琳·肯尼迪-穆尔(Eileen Kennedy-Moore) 著
作者: (加)G.金斯利.沃德
作者: [美]玛莎·M.莱恩汉(Marsha M. Linehan) 著