回覆列表
  • 1 # struggles123

    我學習storm有一段時間了,非常榮幸一起交流這個問題

    瞭解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

    儲存任務分配的資訊、心跳資訊、元資料資訊。

    編寫簡單的傳統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 的一些簡單介紹,由於篇幅有限,講解的不太細緻。

    學習使人充實!!!最後祝大家都可以在大資料的海洋裡隨心遨遊!

  • 中秋節和大豐收的關聯?
  • 孕期喝咖啡對胎兒健康有什麼影響?