《Storm企業級應用:實戰、運維和調優》——3.5 Stream訊息流和StreamGrouping訊息流組
本節書摘來自華章計算機《Storm企業級應用:實戰、運維和調優》一書中的第3章,第3.5節,作者:馬延輝 陳書美 雷葆華著, 更多章節內容可以訪問雲棲社群“華章計算機”公眾號檢視。
3.5 Stream訊息流和Stream Grouping訊息流組
Storm核心的抽象概念是“流”。流是一個分散式並行建立和處理的無界的連續元組(Tuple)。流通過給流元組中欄位命名來定義。在預設情況下,元組可以包含整型、長整型、短整型、位元組、字串、雙精度浮點數、單精度浮點數、布林型和位元組陣列。
3.5.1 Stream訊息流
訊息流是Storm中最關鍵的抽象,是一個沒有邊界的Tuple序列,這些Tuple以分散式的方式並行地建立和處理。定義訊息流主要是定義訊息流中的Tuple。Tuple的定義在3.1節已經做了詳細介紹,本章節不再累述。訊息流Tuple中的每個欄位都有一個名字,並且不同Tuple對應欄位的型別必須相同。兩個Tuple的第一個欄位的型別必須相同,第二個欄位的型別必須相同,但是第一個欄位和第二個欄位可以有不同的型別。
每個訊息流在定義時都會分配一個ID,因為單向訊息流很普遍,OutputFieldsDeclarer定義了一些方法可以定義一個流而不用指定其ID。在這種情況下,該流有一個預設的ID。
3.5.2 Stream Grouping訊息流組
定義Topology的其中一步是定義每個Bolt接受何種流作為輸入。Stream Grouping(訊息流組)就是用來定義一個流如何分配Tuple到Bolt。Storm包括6種流分組型別。
1)隨機分組(Shuffle Grouping):隨機分發元組到Bolt的任務,保證每個任務獲得相等數量的元組。
2)欄位分組(Fields Grouping):根據指定欄位分割資料流並分組。例如,根據“user-id”欄位,具有該欄位的Tuple被分到相同的Bolt,不同的“user-id”值則會被分配到不同的Bolt。
3)全部分組(All Grouping):對於每一個Tuple來說,所有的Bolt都會收到,所有的Tuple被複制到Bolt的所有任務上,需小心使用該分組。
4)全域性分組(Global Grouping):全部的流都分配到Bolt的同一個任務,就是分配給ID最小的Task。
5)無分組(None Grouping):不分組的含義是,流不關心到底誰會收到它的Tuple。目前無分組等效於隨機分組,不同的是Storm將把無分組的Bolt放到訂閱Bolt或Spout的同一執行緒中執行(在可能實現的前提下)。
6)直接分組(Direct Grouping):這是一個特別的分組型別。元組生產者決定元組由哪個元組消費者任務接收。該分組僅能被宣告為direct stream的流使用。元組必須通過emitDirect方法直接發射。Bolt獲取消費者任務ID,可以使用已提供的TopologyContext類或保持引用OutputCollector類的emit方法的輸出,元組傳送後返回任務ID列表。
相關文章
- Storm概念學習系列之Stream訊息流 和 Stream Grouping 訊息流組ORM
- 《Storm企業級應用:實戰、運維和調優》——2.5 本章小結ORM運維
- 《Storm企業級應用:實戰、運維和調優》——1.6 本章小結ORM運維
- 《Storm企業級應用:實戰、運維和調優》——第2章開始使用StormORM運維
- 《Storm企業級應用:實戰、運維和調優》——2.1 環境準備ORM運維
- 《Storm企業級應用:實戰、運維和調優》——2.4 建立Topology並向叢集提交任務ORM運維
- Kafka萬億級訊息實戰Kafka
- 深入解析MFC訊息響應和訊息路由路由
- RabbitMQ實戰:訊息通訊模式和最佳實踐MQ模式
- 使用 laravel-wechat-notification 傳送微信模板訊息、企業微信應用訊息Laravel
- .net core 訊息流處理流程
- WebWorker與WebSocket實現前端訊息匯流排Web前端
- 阿里雲訊息佇列 RocketMQ 5.0 全新升級:訊息、事件、流融合處理平臺阿里佇列MQ事件
- MQTT-保留訊息和遺囑訊息MQQT
- 自定義訊息和對訊息的理解
- 手寫訊息匯流排LiveDataBusLiveData
- SpringCloud(六)Bus訊息匯流排SpringGCCloud
- 訊息匯流排Bus介紹及使用場景-訊息佇列和RabbitMQ介紹及安裝佇列MQ
- RabbitMQ實戰:理解訊息通訊MQ
- Storm保證訊息處理ORM
- 訊息佇列系列一:訊息佇列應用佇列
- SpringCloud 2020.0.4 系列之 Stream 訊息廣播 與 訊息分組 的實現SpringGCCloud
- 訊息粘包 和 訊息不完整 問題
- Android元件化方案及元件訊息匯流排modular-event實戰Android元件化
- 用程式碼理解 ObjC 中的傳送訊息和訊息轉發OBJ
- 用程式碼理解ObjC中的傳送訊息和訊息轉發OBJ
- 社交場景下iOS訊息流互動層實踐iOS
- 訊息佇列 RocketMQ 5.0:從訊息服務到雲原生事件流平臺佇列MQ事件
- springcloud(九):配置中心和訊息匯流排(配置中心終結版)SpringGCCloud
- 訊息匯流排和活動系統滲透到Linux桌面(轉)Linux
- DDD實戰分享-訊息中心
- Storm系列(四)並行度和流分組ORM並行
- Spring Cloud Bus 訊息匯流排介紹SpringCloud
- strimzi實戰之二:部署和訊息功能初體驗
- 如何優雅的實現訊息通訊?
- BGP訊息型別和分組公有首部-VeCloud型別Cloud
- 用訊息佇列和socket實現聊天系統佇列
- QStyledItemDelegate 和QTreeView實現滑鼠hover訊息QTView