本書是一本指導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在事務處理方麵的原理和機製,它是否提供瞭原生的事務支持,或者需要藉助其他的組件和方法來實現?更令我期待的是“策略”二字,它意味著這本書將不僅僅是技術堆砌,而是會提供一套完整的、可操作的解決方案。我希望作者能夠分享他在實踐中總結齣的各種應對策略,比如如何設計閤適的拓撲結構、如何處理冪等性、如何進行異常捕獲與重試,以及如何在分布式環境下實現精確一次(exactly-once)處理。這些都是我目前在實際項目中非常欠缺的知識和經驗。
評分這本書的書名《Storm應用實踐:實時事務處理之策略》聽起來就非常接地氣,也正是我工作中急需的。我們公司在做一些實時推薦和風控係統的時候,經常會遇到數據處理的延遲問題,更頭疼的是,在大量並發請求下,如何保證交易數據的準確性和一緻性,這簡直是讓人抓狂。Storm的名字我早就聽說過,也大緻瞭解它的分布式流處理能力,但具體如何將它用到實處,特彆是在處理事務性數據時,確實缺乏清晰的指導。書名裏的“應用實踐”和“策略”兩個詞,讓我覺得這本書不會是那種紙上談兵的理論書,而是會包含一些真實案例和可復用的方法論。我特彆期待它能告訴我,如何設計一個Storm拓撲來高效地處理海量的實時事務,例如,如何平衡並行度和容錯性,如何有效地管理狀態,以及在齣現故障時,如何最大限度地減少數據丟失和重復。如果書中能提供一些不同場景下的策略對比,比如在一緻性要求極高時,應該如何權衡性能,或者在對性能有極緻追求時,又有哪些可以犧牲的權衡,那這本書的價值就太大瞭。
評分這本書的書名,"Storm應用實踐:實時事務處理之策略",一下子就抓住瞭我關注的焦點——實時性與事務性。在當今這個數據爆炸的時代,很多應用場景對數據的處理速度提齣瞭前所未有的要求,而同時,數據的準確性和一緻性又至關重要,尤其是在處理金融交易、訂單係統等關鍵業務時,任何的差錯都可能導緻嚴重的後果。Storm作為一款分布式流處理係統,其強大的實時處理能力毋庸置疑,但如何在Storm的框架下實現可靠的事務處理,這其中的學問可就深瞭。我希望這本書能夠深入淺齣地講解Storm在事務處理方麵的機製,比如它如何保證數據的不丟失、不重復,以及在分布式環境下的容錯和高可用性。更重要的是,書名中的“策略”二字,讓我對本書的期待又提高瞭一個層次。它暗示瞭作者將不僅僅停留在技術的介紹,而是會分享一些經過實踐檢驗的、行之有效的處理策略和架構設計。我非常渴望瞭解這些策略是如何在實際項目中應用的,它們是否能夠幫助我們應對復雜多變的業務需求,構建齣穩定、高效、可擴展的實時事務處理係統。
評分這本書的書名就讓我十分好奇,"Storm應用實踐:實時事務處理之策略"。光是聽起來就很有分量,也讓我聯想到很多需要極速響應的場景,比如金融交易、在綫遊戲、物聯網數據流等等。我特彆關注的是"實時事務處理"這幾個字,它意味著數據處理的速度要求極高,而且需要保證事務的原子性、一緻性、隔離性和持久性。這一點對於任何一個對技術有追求的開發者來說,都是一個巨大的挑戰。再結閤"策略"這個詞,我推測這本書不僅僅是講解Storm技術本身,更重要的是如何結閤Storm來設計和實現一套高效、可靠的實時事務處理方案。這讓我想到,很多時候,掌握瞭工具的使用隻是第一步,更重要的是知道在什麼場景下,如何巧妙地運用工具,纔能達到最優的效果。作者在這本書中是否會分享一些實用的設計模式、架構思路,甚至是一些踩坑總結,這都是我非常期待的。這本書能否為我解決在實際項目中遇到的實時性要求與事務一緻性之間的矛盾提供一些啓發性的指引,將是評價這本書價值的關鍵。希望它能讓我從理論走嚮實踐,將Storm的強大能力真正應用到解決實際業務問題上來。
評分看沒看,期待能不錯,補知識
評分好東西,好東西
評分正品666
評分買多次瞭,非常好,還會繼續關注的
評分一天看完,對storm有瞭基本的瞭解
評分最新的一本storm,期望內容翔實
評分東西不錯,物流很快,贊一個
評分內容不做評價,包裝太簡陋瞭,書沒有任何包裝直接就放快遞袋子裏瞭,收到書封麵很髒,還有破損,和舊書沒什麼區彆
評分好。。。。。。。。。。
本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度,google,bing,sogou 等
© 2025 book.teaonline.club All Rights Reserved. 圖書大百科 版權所有