1. 程式人生 > >Apache Storm從一端讀取實時數據的原始流

Apache Storm從一端讀取實時數據的原始流

基本 均勻分布 jpeg 陣列 字符 olt 編寫 取數 順序

  Apache Storm從一端讀取實時數據的原始流,並將其傳遞通過一系列小處理單元,並在另一端輸出處理/有用的信息。
  
  下圖描述了Apache Storm的核心概念。
  
  640?wx_fmt=png&wxfrom=5&wx_lazy=1
  
  現在讓我們仔細看看Apache Storm的組件 -
  
  組件 描述
  
  Tuple Tuple是Storm中的主要數據結構。它是有序元素的列表。默認情況下,Tuple支持所有數據類型。通常,它被建模為一組逗號分隔的值,並傳遞到Storm集群。
  
  Stream 流是元組的無序序列。
  
  Spouts 流的源。通常,Storm從原始數據源(如Twitter Streaming API,Apache Kafka隊列,Kestrel隊列等)接受輸入數據。否則,您可以編寫spouts以從數據源讀取數據。“ISpout”是實現spouts的核心接口,一些特定的接口是IRichSpout,BaseRichSpout,KafkaSpout等。
  
  Bolts Bolts是邏輯處理單元。Spouts將數據傳遞到Bolts和Bolts過程,並產生新的輸出流。Bolts可以執行過濾,聚合,加入,與數據源和數據庫交互的操作。Bolts接收數據並發射到一個或多個Bolts。 “IBolt”是實現Bolts的核心接口。一些常見的接口是IRichBolt,IBasicBolt等。
  
  讓我們來看一個“Twitter分析”的實時示例,看看如何在Apache Storm中建模。下圖描述了結構。
  
  0?wx_fmt=png
  
  “Twitter分析”的輸入來自Twitter www.dfgjpt.com Streaming API。Spout將使用Twitter Streaming API讀取用戶的tweets,並作為元組流輸出。來自spout的單個元組將具有twitter用戶名和單個tweet作為逗號分隔值。然後,這個元組的蒸汽將被轉發到Bolt,並且Bolt將tweet拆分成單個字,計算字數,並將信息保存到配置的數據源。現在,我們可以通過查詢數據源輕松獲得結果。
  
  拓撲
  
  Spouts和Bolts連接在一起,形成拓撲結構。實時應用程序邏輯在Storm拓撲中指定。簡單地說,拓撲是有向圖,其中頂點是計算,邊緣是數據流。
  
  簡單拓撲從spouts開始。Spouts將數據發射到一個或多個Bolts。www.jyyl157.com Bolt表示拓撲中具有最小處理邏輯的節點,並且Bolts的輸出可以發射到另一個Bolts作為輸入。
  
  Storm保持拓撲始終運行,直到您終止拓撲。Apache Storm的主要工作是運行拓撲,並在給定時間運行任意數量的拓撲。
  
  任務
  
  現在你有一個關於Spouts和Bolts的基本想法。它們是拓撲的最小邏輯單元,並且使用單個Spout和Bolt陣列構建拓撲。應以特定順序正確執行它們,以使拓撲成功運行。Storm執行的每個Spout和Bolt稱為“任務”。簡單來說,任務是Spouts或Bolts的執行。在給定時間,每個Spout和Bolt可以具有在多個單獨的螺紋中運行的多個實例。
  
  進程
  
  拓撲在多個工作節點上以分布式方式運行。Storm將所有工作節點上的任務均勻分布。工作節點的角色是監聽作業,並在新作業到達時啟動或停止進程。
  
  流分組
  
  數據流從Spouts流到Bolts,或從一個Bolts流到另一個Bolts。流分組控制元組在拓撲中的路由方式,並幫助我們了解拓撲中的元組流。有四個內置分組,如下所述。
  
  隨機分組
  
  在隨機分組中,相等數量的元組隨機分布在執行Bolts的所有工人中。下圖描述了結構。
  
  0?wx_fmt=jpeg
  
  字段分組
  
  元組中具有相同值的字段組合在一起,其余的元組保存在外部。然後,具有相同字段值的元組被向前發送到執行Bolts的同一進程。例如,如果流由字段“字”分組,則具有相同字符串“Hello”的元組將移動到相同的工作者。下圖顯示了字段分組的工作原理。
  
  0?wx_fmt=jpeg
  
  全局分組
  
  所有流可以分組並向前到一個Bolts。此分組將源的所有實例生成的元組發送到單個目標實例(具體來說,選擇具有最低ID的工作程序)。
  
  0?wx_fmt=jpeg
  
  所有分組
  
  所有分組將每個元組的單個副本發送到接收Bolts的所有實例。這種分組用於向Bolts發送信號。所有分組對於連接操作都很有用。

Apache Storm從一端讀取實時數據的原始流