日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JStorm-介绍

發(fā)布時間:2025/3/15 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JStorm-介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.概述

  JStorm 是一個類似于 Hadoop 的MapReduce的計算系統(tǒng),它是由Alibaba開源的實時計算模型,它使用Java重寫了原生的Storm模型(Clojure和Java混合編寫的),并且再原來的基礎(chǔ)上做了許多改進(jìn)。用戶只需按照指定的接口實現(xiàn)一個任務(wù),然后將這個任務(wù)提交給JStorm系統(tǒng),JStorm在接受了任務(wù)指令后,會無間斷運行任務(wù),一旦出現(xiàn)異常導(dǎo)致某個Worker發(fā)送故障,調(diào)度器立刻會分配一個新的Worker去頂替異常的Worker。下面是本次分享的目錄結(jié)構(gòu):

  • 應(yīng)用場景
  • 基本術(shù)語
  • JStorm比較
  • JStorm架構(gòu)
  • 總結(jié)

  下面開始今天的內(nèi)容分享。

2.應(yīng)用場景

  從應(yīng)用的角度來說,JStorm它是一種分布式的應(yīng)用;從系統(tǒng)層面來說,它又類似于MapReduce這樣的調(diào)度系統(tǒng);而從數(shù)據(jù)方面來說,它又是一種基于流水?dāng)?shù)據(jù)的實時處理解決方案。如今,DT時代的當(dāng)下,用戶和企業(yè)也不僅僅只滿足于離線數(shù)據(jù),對于數(shù)據(jù)的實時性要求也越來越高了。

  在早期,Storm和JStorm未問世之前,業(yè)界有很多實時計算系統(tǒng),可謂百家爭鳴,自Storm和JStorm出世之后,基本這兩者占據(jù)主要地位,原因如下:

  • 易開發(fā):接口簡單,上手容易,只需要按照Spout,Bolt以及Topology的編程規(guī)范即可開發(fā)一個擴(kuò)展性良好的應(yīng)用,底層的細(xì)節(jié)我們可以不用去深究其原因。
  • 擴(kuò)展性:可線性擴(kuò)展性能。
  • 容錯:當(dāng)Worker異常或掛起,會自動分配新的Worker去工作。
  • 數(shù)據(jù)精準(zhǔn):其包含Ack機(jī)制,規(guī)避了數(shù)據(jù)丟失的風(fēng)險。使用事物機(jī)制,提高數(shù)據(jù)精度。

  JStorm處理數(shù)據(jù)的方式流程是基于流式處理,因此,我們會用它做以下處理:

  • 日志分析:從收集的日志當(dāng)中,統(tǒng)計出特定的數(shù)據(jù)結(jié)果,并將統(tǒng)計后的結(jié)果持久化到外界存儲介質(zhì)中,如:DB。當(dāng)下,實時統(tǒng)計主流使用JStorm和Storm。
  • 消息轉(zhuǎn)移:將接受的消息進(jìn)行Filter后,定向的存儲到另外的消息中間件中。

3.基本術(shù)語

3.1 Stream

  在JStorm當(dāng)中,有對Stream的抽象,它是一個不間斷的無界的連續(xù)Tuple,而JStorm在建模事件流時,把流中的事件抽象未Tuple,流程如下圖所示:

3.2 Spout和Bolt

  在JStorm中,它認(rèn)為每個Stream都有一個Stream的來源,即Tuple的源頭,所以它將這個源頭抽象為Spout,而Spout可能是一個消息中間件,如:MQ,Kafka等。并不斷的發(fā)出消息,也可能是從某個隊列中不斷讀取隊列的元數(shù)據(jù)。

  在有了Spout后,接下來如何去處理相關(guān)內(nèi)容,以類似的思想,將JStorm的處理過程抽象為Bolt,Bolt可以消費任意數(shù)量的輸入流,只要將流方向?qū)У皆揃olt即可,同時,它也可以發(fā)送新的流給其他的Bolt使用,因而,我們只需要開啟特定的Spout,將Spout流出的Tuple導(dǎo)向特定的Bolt,然后Bolt對導(dǎo)入的流做處理后再導(dǎo)向其它的Bolt等。

  那么,通過上述描述,其實,我們可以用一個形象的比喻來理解這個流程。我們可以認(rèn)為Spout就是一個個的水龍頭,并且每個水龍頭中的水是不同的,我們想要消費那種水就去開啟對應(yīng)的水龍頭,然后使用管道將水龍頭中的水導(dǎo)向一個水處理器,即Bolt,水處理器處理完后會再使用管道導(dǎo)向到另外的處理器或者落地到存儲介質(zhì)。流程如下圖所示:

3.3 Topology

  如圖所示,這是一個有向無環(huán)圖,JStorm將這個圖抽象為Topology,它是JStorm中最高層次的一個抽象概念,它可以處理代碼層面當(dāng)中直接于JStorm打交道的,可以被提交到JStorm集群執(zhí)行對應(yīng)的任務(wù),一個Topology即為一個數(shù)據(jù)流轉(zhuǎn)換圖,圖中的每個節(jié)點是一個Spout或者Bolt,當(dāng)Spout或Bolt發(fā)送Tuple到流時,它就發(fā)送Tuple到每個訂閱了該流的Bolt上。

3.4 Tuple

  JStorm當(dāng)中將Stream中數(shù)據(jù)抽象為了Tuple,一個Tuple就是一個Value List,List值的每個Value都有一個Name,并且該Value可以是基本類型,字符類型,字節(jié)數(shù)組等,當(dāng)然也可以是其它可序列化的類型。Topology的每個節(jié)點都要說明它所發(fā)射出的Tuple的字段的Name,其它節(jié)點只需要訂閱該Name就可以接收處理相應(yīng)的內(nèi)容。

3.5 Worker和Task

  Work和Task在JStorm中的職責(zé)是一個執(zhí)行單元,一個Worker表示一個進(jìn)程,一個Task表示一個線程,一個Worker可以運行多個Task。而Worker可以通過setNumWorkers(int workers)方法來設(shè)置對應(yīng)的數(shù)目,表示這個Topology運行在多個JVM(PS:一個JVM為一個進(jìn)程,即一個Worker);另外setSpout(String id, IRichSpout spout, Number parallelism_hint)和setBolt(String id, IRichBolt bolt,Number parallelism_hint)方法中的參數(shù)parallelism_hint代表這樣一個Spout或Bolt有多少個實例,即對應(yīng)多少個線程,一個實例對應(yīng)一個線程。

3.6 Slot

  在JStorm當(dāng)中,Slot的類型分為四種,他們分別是:CPU,Memory,Disk,Port;與Storm有所區(qū)別(Storm局限于Port)。一個Supervisor可以提供的對象有:CPU Slot、Memory Slot、Disk Slot以及Port Slot。

  • 在JStorm中,一個Worker消耗一個Port Slot,默認(rèn)一個Task會消耗一個CPU Slot和一個Memory Slot
  • 在Task執(zhí)行較多的任務(wù)時,可以申請更多的CPU Slot
  • 在Task需要更多的內(nèi)存時,可以申請更多的額Memory Slot
  • 在Task磁盤IO較多時,可以申請Disk Slot

4.JStorm比較

  當(dāng)前JStorm已經(jīng)更新到2.x版本了,較于Storm而言,JStorm在一個Nimbus宕機(jī)后,會自動的熱切到備份的Nimbus,實現(xiàn)了HA特性。對比與其它的數(shù)據(jù)產(chǎn)品而言,如下所示:

  • Flume:一個成熟的產(chǎn)品,目前很多企業(yè)的日志收集系統(tǒng)均基于此套件開發(fā),可以將數(shù)據(jù)收集后做一些計算與分析。
  • S4:它是一個通用的,可擴(kuò)展的,分布式的,容錯,可插拔的平臺,使程序員可以很容易地開發(fā)用于處理無界的連續(xù)數(shù)據(jù)流應(yīng)用。數(shù)據(jù)準(zhǔn)確性較差,數(shù)據(jù)丟失的風(fēng)險無法規(guī)避,導(dǎo)致其發(fā)展不是很迅速,社區(qū)活躍度不夠高。
  • AKKA:一個Actor模型,系統(tǒng)模型強(qiáng)大,可以做任何你想做的時,當(dāng)時很多工作都需要自己親自動手去實現(xiàn),如序列化、Topology的生成等。
  • Spark:基于內(nèi)存計算的MapReduce模型,偏重于數(shù)據(jù)批量處理。

5.JStorm架構(gòu)

  從設(shè)計層面來說,JStorm是一個典型的調(diào)度系統(tǒng)。在這個系統(tǒng)中,有以下內(nèi)容:

角色作用
Nimbus調(diào)度器
SupervisorWorker的代理角色,負(fù)責(zé)Kill掉Worker和運行Worker
WorkerTask的容器
Task任務(wù)的執(zhí)行者
ZooKeeper系統(tǒng)的協(xié)調(diào)者

  其整體架構(gòu)圖,如下所示:

6.總結(jié)

  本篇博客給大家分享了JStorm的相關(guān)內(nèi)容,其中包含一些基本概念,與Storm的區(qū)別,它的架構(gòu)圖等內(nèi)容,后續(xù)會大家介紹如何去部署JStorm的相關(guān)內(nèi)容,以及它的編程方式,API的用法等內(nèi)容會用一些案例給大家去一一的贅述。

7.結(jié)束語

  這篇博客就和大家分享到這里,如果大家在研究學(xué)習(xí)的過程當(dāng)中有什么問題,可以加群進(jìn)行討論或發(fā)送郵件給我,我會盡我所能為您解答,與君共勉!

?

轉(zhuǎn)載于:https://www.cnblogs.com/smartloli/p/4810362.html

總結(jié)

以上是生活随笔為你收集整理的JStorm-介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。