我學習storm有一段時間了,非常榮幸一起交流這個問題
1. 用來實時處理資料
2. 特點:低延遲、高可用、分散式、可擴充套件、資料不丟失
3. 提供簡單容易理解的介面,便於開發
//Nimbus
1. 負責資源分配和任務排程
2. 一臺物理機
//Supervisor
1. 負責接受nimbus分配的任務
2. 可以有多個Supervisor(物理機)
3. 啟動和停止屬於自己管理的worker程序
4. Supervisor上啟動worker的數量:
storm.yaml檔案中 supervisor.slots.ports 埠的數量
//Worker
1. 執行任務的具體元件
2. 數量在程式中指定
3. 本質是一個JVM,一個程序。
4. 執行的任務型別只有兩種:Spout任務、Bolt任務
5. 一個worker中可能同時存在多個Spout任務和多個bolt任務(執行緒)
//Task
1. worker中每一個spout/bolt的例項稱為一個task
2. 一個Task屬於一個Spout/Bolt併發任務
3. 某個任務的Task數量在程式中指定
4. 在storm0.8之後,task不再與物理執行緒對應,不同spout/bolt的task可能會共享一個物理 執行緒,該物理執行緒稱為executor
5. 預設:Task數=executor數(執行緒數) 也可以:Task數 > executor數(執行緒數),
即一個執行緒對應多個Task,此時executor會迴圈遍歷執行task
這樣做:便於以後擴容,因為程式提交後,Task數量不能改變,但是可以改變執行緒數,
進行擴容
6. 同一個任務的task在多個worker中的數量分配方式:
輪詢分配
//Zookeeper
儲存任務分配的資訊、心跳資訊、元資料資訊。
使用基本的spout、bolt實現簡單的流式程式設計,在這裡就不列程式碼了
1. Trident是用基礎Spout,bolt寫出來的
2. 在高速處理(每秒百萬次訊息)的同時,
也提供了 低延時分散式查詢 和 有狀態流式處理(可以判斷資料是否被處理) 的能力.
3. 提供了joins, aggregations, grouping, functions, 以及filters等能力
4. Trident也提供
一致性(consistent):同一批次資料要麼都透過,要麼都重新處理
有且僅有一次(exactly-once)等語義:所有資料只被同一bolt有效處理一次
5. Trident中處理的資料處理的資料不再是tuple,而是 一系列tuple 組成的Batch
每次資料傳遞的都是Batch,Trident中函式操作的也是Batch
注意:一個batch在spout中就已經劃分好了,不受後面分割槽的影響,
即使進入3個分割槽,但他們整體是一個batch
6. partition:可以理解為每個component(spout、bolt)的每個例項(task)
從storm 1.1.0開始,加入了storm sql功能,目前仍是experimental(實驗性) 功能。但經本人的實踐,目前已經能夠滿足大部分需求。
Storm SQL 使使用者Storm 可以使用標準的sql語句實現複雜的拓撲功能,把kafka等輸入輸出資料來源全部抽象為table,透過where條件作為bolt中的判斷條件,大大減少了使用者的學習使用成本,等到退出穩定版,必定成為流式處理的熱門應用
上述就是對storm 的一些簡單介紹,由於篇幅有限,講解的不太細緻。
學習使人充實!!!最後祝大家都可以在大資料的海洋裡隨心遨遊!
我學習storm有一段時間了,非常榮幸一起交流這個問題
瞭解storm1. 用來實時處理資料
2. 特點:低延遲、高可用、分散式、可擴充套件、資料不丟失
3. 提供簡單容易理解的介面,便於開發
瞭解核心元件//Nimbus
1. 負責資源分配和任務排程
2. 一臺物理機
//Supervisor
1. 負責接受nimbus分配的任務
2. 可以有多個Supervisor(物理機)
3. 啟動和停止屬於自己管理的worker程序
4. Supervisor上啟動worker的數量:
storm.yaml檔案中 supervisor.slots.ports 埠的數量
//Worker
1. 執行任務的具體元件
2. 數量在程式中指定
3. 本質是一個JVM,一個程序。
4. 執行的任務型別只有兩種:Spout任務、Bolt任務
5. 一個worker中可能同時存在多個Spout任務和多個bolt任務(執行緒)
//Task
1. worker中每一個spout/bolt的例項稱為一個task
2. 一個Task屬於一個Spout/Bolt併發任務
3. 某個任務的Task數量在程式中指定
4. 在storm0.8之後,task不再與物理執行緒對應,不同spout/bolt的task可能會共享一個物理 執行緒,該物理執行緒稱為executor
5. 預設:Task數=executor數(執行緒數) 也可以:Task數 > executor數(執行緒數),
即一個執行緒對應多個Task,此時executor會迴圈遍歷執行task
這樣做:便於以後擴容,因為程式提交後,Task數量不能改變,但是可以改變執行緒數,
進行擴容
6. 同一個任務的task在多個worker中的數量分配方式:
輪詢分配
//Zookeeper
儲存任務分配的資訊、心跳資訊、元資料資訊。
編寫簡單的傳統storm程式使用基本的spout、bolt實現簡單的流式程式設計,在這裡就不列程式碼了
使用Trident做高階的抽象程式設計1. Trident是用基礎Spout,bolt寫出來的
2. 在高速處理(每秒百萬次訊息)的同時,
也提供了 低延時分散式查詢 和 有狀態流式處理(可以判斷資料是否被處理) 的能力.
3. 提供了joins, aggregations, grouping, functions, 以及filters等能力
4. Trident也提供
一致性(consistent):同一批次資料要麼都透過,要麼都重新處理
有且僅有一次(exactly-once)等語義:所有資料只被同一bolt有效處理一次
5. Trident中處理的資料處理的資料不再是tuple,而是 一系列tuple 組成的Batch
每次資料傳遞的都是Batch,Trident中函式操作的也是Batch
注意:一個batch在spout中就已經劃分好了,不受後面分割槽的影響,
即使進入3個分割槽,但他們整體是一個batch
6. partition:可以理解為每個component(spout、bolt)的每個例項(task)
使用storm sql從storm 1.1.0開始,加入了storm sql功能,目前仍是experimental(實驗性) 功能。但經本人的實踐,目前已經能夠滿足大部分需求。
Storm SQL 使使用者Storm 可以使用標準的sql語句實現複雜的拓撲功能,把kafka等輸入輸出資料來源全部抽象為table,透過where條件作為bolt中的判斷條件,大大減少了使用者的學習使用成本,等到退出穩定版,必定成為流式處理的熱門應用
上述就是對storm 的一些簡單介紹,由於篇幅有限,講解的不太細緻。
學習使人充實!!!最後祝大家都可以在大資料的海洋裡隨心遨遊!