本书是一本指导Storm用户实践应用的指南,从Storm组件的应用细节、Storm的代码逻辑,到如何优化拓扑性能,以及如何在生产环境中部署Storm集群,作者将TheLadders的项目实践经验都整理归纳并在本书中完整呈现,配上大量图例说明,还附带了应用代码演示,使读者可以在短时间内学到作者花费多年才总结出来的Storm知识精华。
目 录?Contents
译者序
序
前言
致谢
关于本书
关于原书封面插图
第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
前 言?Preface在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的知识。
致 谢?Acknowledgements感谢TheLadders所有为我们提供反馈和支持的同事,无论如何,这都是一本属于集体的书,指导着我们在集群上实现更多更酷的功能。
也感谢来自Manning并为本书撰写提供大量帮助的伙伴,这是一个很棒的团队,在合作期间我们从他们身上学到了很多关于写作的知识。特别感谢编辑Dan Maharry,从第1章开始一直到最后一章完成,他为第一次写书的我们提供了大量的帮助,指导我们在错误和挫折中成长。
感谢所有参与本书的技术审校人员,感谢他们贡献了自己私人的时间来核实书中的各技术要点:Antonios Tsaltas,Eugene Dvorkin,Gavin Whyte,Gianluca Righetto,Ioamis Polyzos,John Guthrie,Jon Miller,Kasper Madsen,Lars Francke,Lokesh Kumar,Lorcon Coyle,Mahmoud Alnahlawi,Massimo Ilario,Michael Noll,Muthusamy Manigandan,Rodrigo Abreau,Romit Singhai,Satish Devarapalli,Shay Elkin,Sorbo Bagchi以及Tanguy Leroux。其中我要着重感谢Michael Rose,感谢他为本书提供了大量高质量的反馈,可以说是本书最重要的技术审校人员。
感谢那些创造了Storm的人,没有他们,我们就不会有日夜奋斗的理由!我们还会坚持使用Storm,也期待未来Storm可以带来更新的改进。
感谢Andrew Montalenti在我们早期手稿中提供的反馈,这给了我们很大的启发,并支撑我们完成了本书,他写的推荐序也很棒,我们没办法要求更多了。
最后还要感谢Eleanor Roosevelt,她那句被大量错误引用的励志名言“美国在哪里都讲速度,燥热、肮脏、惹是生非的速度”,鼓舞着我们在困难中前进,持续地学习Storm。
我们在看颁奖仪式时学到的一件事情,就是一定要感谢一路走来帮助我们的每一个人。
Sean Allen感谢Chas Emerick,如果不是因为和他激烈的争论,我可能根本不会下决心来写一本书,如果没有他的付出,可能就不会有人有机会读到这本书了。Stephanie,感谢他在我每次都想放弃的时候鼓励我坚持下去。Kathy Sierra,感谢他在Twitter上和我沟通,让我能梳理清晰写作的思路。感谢Matt Chesler和Doug Grove,他们帮助纠正了第7章的写作方向。感谢在TheLadders向我咨询问题的伙伴,是他们帮助我完成了第8章。感谢Tom Santero,帮我审阅了我在分布式系统上的一些细节。感谢Matt,帮我做了大量写书期间必须要做但我又不想做的事情。
Matthew Jankowski首先感谢我的妻子Megan,她是我永恒的动力来源,无论写书会占用多少时间,她都表现出无限的耐心,给予我坚定的支持。可以说没有她,我是无法完成本书的。还有我的女儿Rylan,感谢她出生在写作的这段时间里,她给了我很大的启迪,也许她到现在还根本没意识到吧。感谢我的家人、朋友和同事,感谢他们的无限支持和建议。感谢Sean和Peter在刚开始听到这个想法后,就愿意一起参与到本书的创作,这的确是一段漫长的经历,感谢有他们一起一路走来。
关 于 本 书?About this book大数据的概念日趋流行,能用于处理实时流数据的工具显得尤其重要,Apache Storm就是这样一个能处理无限流数据的工具。
本书不仅供新手入门,也不只针对高阶学习。尽管理解大数据技术以及分布式系统可以帮助阅读,但我们并不希望这是作为阅读本书的前提条件。我们尽可能尝试迎合新人或是熟悉该领域的读者,本书最初的目的就在于呈现如何在生产环境中应用Storm的“最佳实践”,但为了更深刻地了解Storm的应用,一些基础知识还是有必要预习的,所以我们希望本书的内容可以面向不同经验层次的工程师。
如果你是刚开始学习Storm的新人,那么我们建议先阅读第1~4章,并且确保要全面理解,因为这几章包含了后面所需要的全部基础概念知识。如果你是有Storm应用经验的读者,那希望后面的章节会对你们更有帮助。总之,设计开发基于Storm的解决方案仅仅是个开始,在生产环境中实践这些方案才是我们需要在Storm上思考的重点。
本书的另外一个目的就是希望尽可能描述Storm的应用领域,基于此我们选择了一些典型的用户场景,希望对于理解未覆盖到的用户场景可以起到举一反三的作用。我们在选择用户场景的时候也做了不同难度的区分,希望至少能有一种可以适用于你当前正在使用的Storm场景。
本书旨在关注Storm的运行方式,而我们意识到Storm需要和许多不同的技术一起使用,包括不同的消息队列实现以及数据库操作实现等,所以在讲解每种用户场景的时候,我们会很谨慎地选择使用到的技术。我们不希望花太多精力在技术选型上,从而忽视了Storm使用上的重点讲解,所以你看到的每一个演示都默认使用的是Java语言。如果将案例中的应用切换到使用另外一门语言,这么做其实很容易,但我们还是希望明确一点,那就是本书的核心讲解并不在这些上面(事实上,我们在自己写的拓扑上大量使用了Scala)。
路线图第1章介绍大数据和Storm在大数据中所处的地位,该章的目的是展示一个选择Storm的理由和时机,一些关于大数据应用的关键特性,各类用于处理大数据的工具,以及明确Storm的工具类型。
第2章借助一个对某GitHub库提交数的统计案例,解释Storm的核心概念。该章将建立学习Storm的相关术语基础,尝试一小段代码来学习建立Storm工程,而这个案例中的概念也将贯穿本书。
第3章讲解在Storm下设计拓扑结构的最佳实践,同时以一个社交热力图的应用为例,展示了如何将问题基于Storm的结构来做分解,以便适用于程序的上下文实现部署。该章还讨论了如何处理不稳定的数据源,或者是不可靠的外部服务。同时在该章中介绍的首字节并行性,也将成为后续章节中的重点,最后在该章中还深入讨论了高级拓扑设计范式。
第4章以一个信用卡的授权系统为例,探讨Storm如何确保消息以上下文的形式传输,阐述Storm的实现机制,并且如何基于一套方案的部署,提供不同层面的可靠性支持。同时该章在最后做一个总结,说明如何在Storm的拓扑结构上,实现这种不同层次的可靠性支持。
第5章涵盖Storm集群的相关细节,还将讨论Storm集群的各类组件,Storm集群如何提供容错机制,以及如何配置一个Storm集群,并在Storm集群生产环境中部署并启动拓扑。该章的提示内容将重点解释Storm的UI部分,因为后面的章节会越来越多地涉及Storm UI中的相关操作。
第6章阐述在Storm的拓扑结构中,基于一个限时抢购系统的应用案例,如何实现反复调优的过程。同时还讨论如何与外部系统协作,以及会对现有拓扑结构产生的影响。最后,我们将借助Storm现有的指标收集API,讲解如何建立你的自定义指标。
第7章涵盖在同时使用多拓扑的时候,Storm集群可能发生的各种冲突。我们将从一个拓扑中出现资源冲突的情况开始,逐步展开至拓扑间的系统资源冲突,以及Storm进程和其他进程甚至是操作系统之间的系统资源冲突分析,该章将带你领略Storm集群的完整应用效果。
第8章深入讲解Storm,在完整理解后,你基本上就能应对各种情况下的调试了。还深入讲解Storm的并行化和执行器的中心单元,Storm的内部缓存调用方式,溢出的前提条件,如何优化这些缓冲配置等,最后讨论Storm的调试日志输出。
第9章讲解Trident架构,它是一个基于Storm的上层抽象应用架构,同时演示基于它开发一个互联网广播应用。还解释Trident结构的优势,以及什么情况下你会使用到它。我们会比较一个常规的Storm拓扑和一个基于Trident结构的拓扑,分析两者之间的区别。该章还将涉及Storm的分布式远程过程调用(DRPC)组件,以及如何借助它来实现拓扑的状态查询。最后,演示一个完整的Trident拓扑部署,以及如何实现该结构的扩展。
代码的下载和使用规范本书中的所有代码可以在https://github.com/Storm-Applied中下载,包含以下章节中涉及的源代码。
第2章,GitHub的提交次数计数。
第3章,社交热力图。
第4章,信用卡授权。
第6章,限时抢购系统。
......
“Storm应用实践:实时事务处理之策略”——单看这个书名,我就觉得它很有分量,也非常契合我目前正在探索的技术方向。在很多需要近乎实时响应的场景下,比如物联网设备的状态监控、金融市场的实时行情分析、以及大规模用户行为的即时反馈,数据的处理速度和准确性是决定系统成败的关键。Storm作为一款成熟的分布式流处理框架,它的性能和可扩展性毋庸置疑,但如何在其中实现可靠的“事务处理”却是一个普遍的技术难题。我设想这本书不会仅仅停留在Storm的基本API介绍,而是会深入探讨如何在Storm的生态系统中构建一个健壮、可信赖的实时事务处理系统。我特别期待书中能够讲解如何处理数据不丢失、不重复,以及如何处理分布式环境下的并发冲突。书名中的“策略”二字,更是让我充满了期待,它暗示了作者会分享一系列经过实践检验的设计模式和架构思路,帮助读者理解如何在不同的业务场景下,选择最合适的处理方式,从而优化系统的性能和可靠性。这本书能否为我提供一套完整的、可落地的解决方案,将是我衡量其价值的重要标准。
评分这本书的书名就让我十分好奇,"Storm应用实践:实时事务处理之策略"。光是听起来就很有分量,也让我联想到很多需要极速响应的场景,比如金融交易、在线游戏、物联网数据流等等。我特别关注的是"实时事务处理"这几个字,它意味着数据处理的速度要求极高,而且需要保证事务的原子性、一致性、隔离性和持久性。这一点对于任何一个对技术有追求的开发者来说,都是一个巨大的挑战。再结合"策略"这个词,我推测这本书不仅仅是讲解Storm技术本身,更重要的是如何结合Storm来设计和实现一套高效、可靠的实时事务处理方案。这让我想到,很多时候,掌握了工具的使用只是第一步,更重要的是知道在什么场景下,如何巧妙地运用工具,才能达到最优的效果。作者在这本书中是否会分享一些实用的设计模式、架构思路,甚至是一些踩坑总结,这都是我非常期待的。这本书能否为我解决在实际项目中遇到的实时性要求与事务一致性之间的矛盾提供一些启发性的指引,将是评价这本书价值的关键。希望它能让我从理论走向实践,将Storm的强大能力真正应用到解决实际业务问题上来。
评分“Storm应用实践:实时事务处理之策略”——这个书名让我眼前一亮,仿佛看到了解决棘手技术难题的曙光。我一直对流处理技术在构建高性能、低延迟系统中的作用非常感兴趣,而Storm作为其中的佼佼者,更是我学习的重点。然而,在实际的开发过程中,我常常会遇到一个瓶颈:如何在保证极速数据流淌的同时,还要确保事务的完整性和一致性。这就像是在一条飞驰的高速列车上,又要确保每一位乘客都安然无恙地下车,并且行程信息准确无误。我迫切地希望这本书能够详细阐述Storm在事务处理方面的原理和机制,它是否提供了原生的事务支持,或者需要借助其他的组件和方法来实现?更令我期待的是“策略”二字,它意味着这本书将不仅仅是技术堆砌,而是会提供一套完整的、可操作的解决方案。我希望作者能够分享他在实践中总结出的各种应对策略,比如如何设计合适的拓扑结构、如何处理幂等性、如何进行异常捕获与重试,以及如何在分布式环境下实现精确一次(exactly-once)处理。这些都是我目前在实际项目中非常欠缺的知识和经验。
评分这本书的书名《Storm应用实践:实时事务处理之策略》听起来就非常接地气,也正是我工作中急需的。我们公司在做一些实时推荐和风控系统的时候,经常会遇到数据处理的延迟问题,更头疼的是,在大量并发请求下,如何保证交易数据的准确性和一致性,这简直是让人抓狂。Storm的名字我早就听说过,也大致了解它的分布式流处理能力,但具体如何将它用到实处,特别是在处理事务性数据时,确实缺乏清晰的指导。书名里的“应用实践”和“策略”两个词,让我觉得这本书不会是那种纸上谈兵的理论书,而是会包含一些真实案例和可复用的方法论。我特别期待它能告诉我,如何设计一个Storm拓扑来高效地处理海量的实时事务,例如,如何平衡并行度和容错性,如何有效地管理状态,以及在出现故障时,如何最大限度地减少数据丢失和重复。如果书中能提供一些不同场景下的策略对比,比如在一致性要求极高时,应该如何权衡性能,或者在对性能有极致追求时,又有哪些可以牺牲的权衡,那这本书的价值就太大了。
评分这本书的书名,"Storm应用实践:实时事务处理之策略",一下子就抓住了我关注的焦点——实时性与事务性。在当今这个数据爆炸的时代,很多应用场景对数据的处理速度提出了前所未有的要求,而同时,数据的准确性和一致性又至关重要,尤其是在处理金融交易、订单系统等关键业务时,任何的差错都可能导致严重的后果。Storm作为一款分布式流处理系统,其强大的实时处理能力毋庸置疑,但如何在Storm的框架下实现可靠的事务处理,这其中的学问可就深了。我希望这本书能够深入浅出地讲解Storm在事务处理方面的机制,比如它如何保证数据的不丢失、不重复,以及在分布式环境下的容错和高可用性。更重要的是,书名中的“策略”二字,让我对本书的期待又提高了一个层次。它暗示了作者将不仅仅停留在技术的介绍,而是会分享一些经过实践检验的、行之有效的处理策略和架构设计。我非常渴望了解这些策略是如何在实际项目中应用的,它们是否能够帮助我们应对复杂多变的业务需求,构建出稳定、高效、可扩展的实时事务处理系统。
评分此用户未填写评价内容
评分一次性买了好多书,书还没有看,包装有塑料密封,不错
评分买多次了,非常好,还会继续关注的
评分东西不错,物流很快,赞一个
评分东西很好,是我想要的。
评分东西很好,是我想要的。
评分东西很好,是我想要的。
评分此用户未填写评价内容
评分很不错的书,值得细细品味
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.coffeedeals.club All Rights Reserved. 静流书站 版权所有