HOME 首頁
SERVICE 服務產(chǎn)品
XINMEITI 新媒體代運營
CASE 服務案例
NEWS 熱點資訊
ABOUT 關于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    java實現(xiàn)快照

    發(fā)布時間:2023-04-08 05:37:34     稿源: 創(chuàng)意嶺    閱讀: 72        

    大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關于java實現(xiàn)快照的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。

    開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等

    只需要輸入關鍵詞,就能返回你想要的內(nèi)容,越精準,寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端

    官網(wǎng):https://ai.de1919.com。

    創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務客戶遍布全球各地,如需了解SEO相關業(yè)務請撥打電話175-8598-2043,或添加微信:1454722008

    本文目錄:

    java實現(xiàn)快照

    一、什么版本的Java可以玩minecraft快照19w04a?

    用官方啟動器顯示有漏洞,可以試試第三方啟動器啟動例如hmcl(推薦2.3.5.4)

    更換JAVA版本

    64x可以試試32x的

    或者改用java9嘗試或者改用java7

    也可以調(diào)整成debug模式修改bug(難度高)

    最簡單(刪了該版本重新下載)

    通過這些方法應該能達到正常游玩

    拓展延伸

    背景設定

    Minecraft是一款沙盒游戲,整個游戲沒有劇情,玩家在游戲中自由建設和破壞,透過像積木一樣來對元素進行組合與拼湊,輕而易舉的就能制作出小木屋、城堡甚至城市,玩家可以通過自己創(chuàng)造的作品來體驗上帝一般的感覺。在這款游戲里,不僅可以單人娛樂,還可以多人聯(lián)機,玩家也可以安裝一些模組來增加游戲趣味性(比如身為肝帝的我喜歡玩格雷科技。

    Minecraft著重于讓玩家去探索、交互,并且改變一個由一立方米大小的方塊動態(tài)生成的地圖。除了方塊以外,環(huán)境功能還包括植物、生物與物品。游戲里的一些活動包括采集礦石、與敵對生物戰(zhàn)斗、合成新的方塊與收集各種在游戲中找到的資源的工具。游戲中的無限制模式讓玩家在各種多人游戲服務器或他們的單人模式中進行創(chuàng)造建筑物、作品與藝術(shù)創(chuàng)作。其他功能包括邏輯運算與遠程動作的紅石電路、礦車及軌道,,以及稱之為"下界"的神秘世界。最終,可以選擇前往一個叫做“末路之地”的維度旅行,并打倒末影龍。

    二、掠奪者哨塔是哪個版本更新的

    2022-12-22 12:19:47雨雨雨停了

    《我的世界》村莊與掠奪更新(又稱熊貓更新),目前已經(jīng)全面進入了測試階段?;鶐r版1.8發(fā)布快有半個月了,JAVA版1.14終于按捺不住,發(fā)布了全新版本更新的首個快照18w43a!

    我的世界:1.14首個快照發(fā)布!首次加入凋零玫瑰,掠奪獸掉落鞍?我的世界:1.14快照發(fā)布!凋零玫瑰、掠奪者、燉湯、熊貓以及更多。

    一、JAVA版1.14概覽

    此次《我的世界》JAVA版1.14的首個快照版本為18w43a,在10月24日正式發(fā)布,并且同一天發(fā)布了18w43b,第二個快照只是對第一個快照的微小修復。所以我們此次重點測評第一個快照版本更新的內(nèi)容。

    我們都知道《我的世界》JAVA版是Minecraft更新的主旋律,所有版本的MC都最終同JAVA版保持一致。并且JAVA版第一個快照更新內(nèi)容就比基巖版不知道多出多少倍!那么此次1.14首個快照究竟更新了哪些內(nèi)容呢?

    二、凋零玫瑰

    此次《我的世界》JAVA版快照加入了一朵非常有意思的花——凋零玫瑰。這朵花非常不平凡,看名字就知道會與凋靈有關,所以小編單獨拎出來仔細說一下。(另外還新增了矢車菊和鈴蘭兩朵花,沒什么用就不細說了)

    凋零玫瑰:被凋靈BOSS殺死的非亡靈生物,都會變成一朵凋零玫瑰。例如牛、羊、村民等等這一類生物,而僵尸、幻翼、骷髏等等此類亡靈生物不行,因為凋靈也是亡靈;

    凋零效果:凋零玫瑰會對周圍的生物、怪物、或者是玩家造成1秒的凋零效果,這個特性,讓我想到了一個全新的“凋零玫瑰陷阱”,走入凋靈花叢的生物會持續(xù)扣血直至死亡;

    凋靈無法摧毀:凋靈BOSS的攻擊是無法摧毀凋零玫瑰的,似乎這朵花會受到凋靈保護一樣;

    三、掠奪獸是坐騎么?

    此次《我的世界》1.14首發(fā)的快照,并沒有給玩家太多關于掠奪獸的信息。至少沒有揭開掠奪獸是非可以成為坐騎的消息。關于掠奪者,我們倒是可以近距離看一下。因為之前的基巖版都還沒有加入它們!

    Pillager beast:官方翻譯還沒出來,我們姑且先叫做掠奪獸吧。生命值100,攻擊行為就是沖撞,目標是破壞農(nóng)田殺死村民。但此次放出一個全新的特性,玩家殺死掠奪獸,100%掉落鞍!但100生命值,可不是那么好殺的哦。

    Pillager:掠奪者,他存在的目的就是擊殺村民。死亡后的掉落物為:1、綠寶石,2、武器弓弩。

    四、熊貓和竹林

    前期小編針對《我的世界》基巖版測試版中的熊貓做過非常多的測試和說明了。仔細對比了下,發(fā)現(xiàn)JAVA版的熊貓略微有些差異。但目前版本,熊貓暫時還無法自然生成。也就是說,熊貓會在后續(xù)快照中持續(xù)的優(yōu)化和更新。

    但目前可以確定的是,小熊貓在打噴嚏的時候,確定會有幾率打出一個粘液球出來哦。養(yǎng)熊貓刷粘液球,哇咔咔。并且兩只大熊貓生下的小熊貓會移除父母的種類和基因,這個特性還是比較有意思的。

    五、織布機

    織布機是《我的世界》1.14快照放出的一個全新工具,是染色系統(tǒng)的一個全新嘗試吧。2根線 2塊木板即可合成,作用就是用來給旗幟染上各種各樣的圖案。所以原本的用工作臺染色的合成系統(tǒng),已經(jīng)全部移除了。這個有點類似當年基巖版的“切石機”。所以如果織布機沒有更多的用途的話,說不定將來也會被移除吧。

    六、奇怪的燉湯(食物)

    Suspicious stew(奇怪的燉湯),這是一個煲的名字,暫無中文譯名?!段业氖澜纭?.14新加入的一個非常神奇的食物。為什么說它神奇呢,因為玩家用不同的花合成的這個煲,玩家吃下去后,所產(chǎn)生的效果也是不同的。

    合成:紅蘑菇 棕蘑菇 碗 花來合成。合成后,該煲有一個基礎特性是恢復6點饑餓值,和附加1個5秒的效果;

    花的效果:濱菊=生命恢復、絨球蔥=防火、矢車菊=跳躍提升、虞美人=速度、鈴蘭=中毒、凋零玫瑰=凋零、郁金香=虛弱、茜草花=失明、蘭花=飽和、蒲公英=飽和。

    七、方塊更新

    最后來聊一聊《我的世界》方塊的更新,這次更新,真的是更新到了小編的心里。尤其是墻和告示牌的更新,大愛啊,各種墻真的是非常的美麗,從此告別單調(diào)的圓石墻。此次新增了5種材質(zhì)的告示牌,14種臺階,14種樓梯,11種材質(zhì)的墻。這些絕對是Minecraft建筑黨的最愛!

    本次《我的世界》1.14快照帶來了非常多令人驚喜的全新更新,暫時先介紹這么多吧。要知道村莊還沒開始更新呢哦!另外此次也重新編寫了Minecraft的光照系統(tǒng),小編也會持續(xù)帶來1.14最新快照版本的測試與體驗

    三、如何分析線程堆棧

    JVM線程堆棧是一個給定時間的快照,它能向你提供所有被創(chuàng)建出來的Java線程的完整清單.

    每一個被發(fā)現(xiàn)的Java線程都會給你如下信息:

    – 線程的名稱;經(jīng)常被中間件廠商用來識別線程的標識,一般還會帶上被分配的線程池名稱以及狀態(tài) (運行,阻塞等等.)

    – 線程類型 & 優(yōu)先級,例如 : daemon prio=3 ** 中間件程序一般以后臺守護的形式創(chuàng)建他們的線程,這意味著這些線程是在后臺運行的;它們會向它們的用戶提供服務,例如:向你的Java EE應用程序 **

    – Java線程ID,例如 : tid=0x000000011e52a800 ** 這是通過 java.lang.Thread.getId() 獲得的Java線程ID,它常常用自增長的長整形 1..n** 實現(xiàn)

    – 原生線程ID,例如 : nid=0x251c** ,之所以關鍵是因為原生線程ID可以讓你獲得諸如從操作系統(tǒng)的角度來看那個線程在你的JVM中使用了大部分的CPU時間等這樣的相關信息. **

    – Java線程狀態(tài)和詳細信息,例如: waiting for monitor entry [0xfffffffea5afb000] java.lang.Thread.State: BLOCKED (on object monitor)

    ** 可以快速的了解到線程狀態(tài)極其當前阻塞的可能原因 **

    – Java線程棧跟蹤;這是目前為止你能從線程堆棧中找到的最重要的數(shù)據(jù). 這也是你花費最多分析時間的地方,因為Java棧跟蹤向提供了你將會在稍后的練習環(huán)節(jié)了解到的導致諸多類型的問題的根本原因,所需要的90%的信息。

    – Java 堆內(nèi)存分解; 從HotSpot VM 1.6版本開始,在線程堆棧的末尾處可以看到HotSpot的內(nèi)存使用情況,比如說Java的堆內(nèi)存(YoungGen, OldGen) & PermGen 空間。這個信息對分析由于頻繁GC而引起的問題時,是很有用的。你可以使用已知的線程數(shù)據(jù)或模式做一個快速的定位。

    Heap

    PSYoungGen total 466944K, used 178734K [0xffffffff45c00000, 0xffffffff70800000, 0xffffffff70800000)

    eden space 233472K, 76% used [0xffffffff45c00000,0xffffffff50ab7c50,0xffffffff54000000)

    from space 233472K, 0% used [0xffffffff62400000,0xffffffff62400000,0xffffffff70800000)

    to space 233472K, 0% used [0xffffffff54000000,0xffffffff54000000,0xffffffff62400000)

    PSOldGen total 1400832K, used 1400831K [0xfffffffef0400000, 0xffffffff45c00000, 0xffffffff45c00000)

    object space 1400832K, 99% used [0xfffffffef0400000,0xffffffff45bfffb8,0xffffffff45c00000)

    PSPermGen total 262144K, used 248475K [0xfffffffed0400000, 0xfffffffee0400000, 0xfffffffef0400000)

    object space 262144K, 94% used [0xfffffffed0400000,0xfffffffedf6a6f08,0xfffffffee0400000)

    線程堆棧信息大拆解

    為了讓大家更好的理解,給大家提供了下面的這張圖,在這張圖中將HotSpot VM上的線程堆棧信息和線程池做了詳細的拆解,如下圖所示:

    上圖中可以看出線程堆棧是由多個不同部分組成的。這些信息對問題分析都很重要,但對不同的問題模式的分析會使用不同的部分(問題模式會在后面的文章中做模擬和演示。)

    現(xiàn)在通過這個分析樣例,給大家詳細解釋一下HoteSpot上線程堆棧信息中的各個組成部分:

    # Full thread dump標示符

    “Full thread dump”是一個全局唯一的關鍵字,你可以在中間件和單機版本Java的線程堆棧信息的輸出日志中找到它(比如說在UNIX下使用:kill -3 <PID> )。這是線程堆棧快照的開始部分。

    Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.0-b11 mixed mode):

    # Java EE 中間件,第三方以及自定義應用軟件中的線程

    這個部分是整個線程堆棧的核心部分,也是通常需要花費最多分析時間的部分。堆棧中線程的個數(shù)取決你使用的中間件,第三方庫(可能會有獨立線程)以及你的應用程序(如果創(chuàng)建自定義線程,這通常不是一個很好的實踐)。

    在我們的示例線程堆棧中,WebLogic是我們所使用的中間件。從Weblogic 9.2開始, 會使用一個用“’weblogic.kernel.Default (self-tuning)”唯一標識的能自行管理的線程池

    "[STANDBY] ExecuteThread: '414' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon prio=3 tid=0x000000010916a800 nid=0x2613 in Object.wait() [0xfffffffe9edff000]

    java.lang.Thread.State: WAITING (on object monitor)

    at java.lang.Object.wait(Native Method)

    - waiting on <0xffffffff27d44de0> (a weblogic.work.ExecuteThread)

    at java.lang.Object.wait(Object.java:485)

    at weblogic.work.ExecuteThread.waitForRequest(ExecuteThread.java:160)

    - locked <0xffffffff27d44de0> (a weblogic.work.ExecuteThread)

    at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)

    # HotSpot VM 線程

    這是一個有Hotspot VM管理的內(nèi)部線程,用于執(zhí)行內(nèi)部的原生操作。一般你不用對此操太多心,除非你(通過相關的線程堆棧以及 prstat或者原生線程Id)發(fā)現(xiàn)很高的CPU占用率.

    "VM Periodic Task Thread" prio=3 tid=0x0000000101238800 nid=0x19 waiting on condition

    # HotSpot GC 線程

    當使用 HotSpot 進行并行 GC (如今在使用多個物理核心的環(huán)境下很常見), 默認創(chuàng)建的HotSpot VM 或者每個JVM管理一個有特定標識的GC線程時. 這些GC線程可以讓VM以并行的方式執(zhí)行其周期性的GC清理, 這會導致GC時間的總體減少;與此同時的代價是CPU的使用時間會增加.

    "GC task thread#0 (ParallelGC)" prio=3 tid=0x0000000100120000 nid=0x3 runnable

    "GC task thread#1 (ParallelGC)" prio=3 tid=0x0000000100131000 nid=0x4 runnable

    ………………………………………………………………………………………………………………………………………………………………

    這事非常關鍵的數(shù)據(jù),因為當你遇到跟GC有關的問題,諸如過度GC、內(nèi)存泄露等問題是,你將可以利用這些線程的原生Id值關聯(lián)的操作系統(tǒng)或者Java線程,進而發(fā)現(xiàn)任何對CPI時間的高占用. 未來的文章你將會了解到如何識別并診斷這樣的問題.

    # JNI 全局引用計數(shù)

    JNI (Java 本地接口)的全局引用就是從本地代碼到由Java垃圾收集器管理的Java對象的基本的對象引用. 它的角色就是阻止對仍然在被本地代碼使用,但是技術(shù)上已經(jīng)不是Java代碼中的“活動的”引用了的對象的垃圾收集.

    同時為了偵測JNI相關的泄露而留意JNI引用也很重要. 如果你的程序直接使用了JNI,或者像監(jiān)聽器這樣的第三方工具,就容易造成本地的內(nèi)存泄露.

    JNI global references: 1925

    # Java 堆棧使用視圖

    這些數(shù)據(jù)被添加回了 JDK 1 .6 ,向你提供有關Hotspot堆棧的一個簡短而快速的視圖. 我發(fā)現(xiàn)它在當我處理帶有過高CPU占用的GC相關的問題時非常有用,你可以在一個單獨的快照中同時看到線程堆棧以及Java堆的信息,讓你當時就可以在一個特定的Java堆內(nèi)存空間中解析(或者排除)出任何的關鍵點. 你如在我們的示例線程堆棧中所見,Java 的堆 OldGen 超出了最大值!

    Heap

    PSYoungGen total 466944K, used 178734K [0xffffffff45c00000, 0xffffffff70800000, 0xffffffff70800000)

    eden space 233472K, 76% used [0xffffffff45c00000,0xffffffff50ab7c50,0xffffffff54000000)

    from space 233472K, 0% used [0xffffffff62400000,0xffffffff62400000,0xffffffff70800000)

    to space 233472K, 0% used [0xffffffff54000000,0xffffffff54000000,0xffffffff62400000)

    PSOldGen total 1400832K, used 1400831K [0xfffffffef0400000, 0xffffffff45c00000, 0xffffffff45c00000)

    object space 1400832K, 99% used [0xfffffffef0400000,0xffffffff45bfffb8,0xffffffff45c00000)

    PSPermGen total 262144K, used 248475K [0xfffffffed0400000, 0xfffffffee0400000, 0xfffffffef0400000)

    object space 262144K, 94% used [0xfffffffed0400000,0xfffffffedf6a6f08,0xfffffffee0400000)

    我希望這篇文章能對你理解Hotspot VM線程堆棧的基本信息有所幫助。

    四、Flink:特性、概念、組件棧、架構(gòu)及原理分析

    簡單之美 | Apache Flink:特性、概念、組件棧、架構(gòu)及原理分析

    http://shiyanjun.cn/archives/1508.html

    Apache Flink是一個面向分布式數(shù)據(jù)流處理和批量數(shù)據(jù)處理的開源計算平臺,它能夠基于同一個Flink運行時(Flink Runtime),提供支持流處理和批處理兩種類型應用的功能。現(xiàn)有的開源計算方案,會把流處理和批處理作為兩種不同的應用類型,因為他們它們所提供的SLA是完全不相同的:流處理一般需要支持低延遲、Exactly-once保證,而批處理需要支持高吞吐、高效處理,所以在實現(xiàn)的時候通常是分別給出兩套實現(xiàn)方法,或者通過一個獨立的開源框架來實現(xiàn)其中每一種處理方案。例如,實現(xiàn)批處理的開源方案有MapReduce、Tez、Crunch、Spark,實現(xiàn)流處理的開源方案有Samza、Storm。Flink在實現(xiàn)流處理和批處理時,與傳統(tǒng)的一些方案完全不同,它從另一個視角看待流處理和批處理,將二者統(tǒng)一起來:Flink是完全支持流處理,也就是說作為流處理看待時輸入數(shù)據(jù)流是無界的;批處理被作為一種特殊的流處理,只是它的輸入數(shù)據(jù)流被定義為有界的?;谕粋€Flink運行時(Flink Runtime),分別提供了流處理和批處理API,而這兩種API也是實現(xiàn)上層面向流處理、批處理類型應用框架的基礎。

    基本特性

    關于Flink所支持的特性,我這里只是通過分類的方式簡單做一下梳理,涉及到具體的一些概念及其原理會在后面的部分做詳細說明。

    流處理特性

    支持高吞吐、低延遲、高性能的流處理

    支持帶有事件時間的窗口(Window)操作

    支持有狀態(tài)計算的Exactly-once語義

    支持高度靈活的窗口(Window)操作,支持基于time、count、session,以及data-driven的窗口操作

    支持具有Backpressure功能的持續(xù)流模型

    支持基于輕量級分布式快照(Snapshot)實現(xiàn)的容錯

    一個運行時同時支持Batch on Streaming處理和Streaming處理

    Flink在JVM內(nèi)部實現(xiàn)了自己的內(nèi)存管理

    支持迭代計算

    支持程序自動優(yōu)化:避免特定情況下Shuffle、排序等昂貴操作,中間結(jié)果有必要進行緩存

    API支持

    對Streaming數(shù)據(jù)類應用,提供DataStream API

    對批處理類應用,提供DataSet API(支持Java/Scala)

    Libraries支持

    支持機器學習(FlinkML)

    支持圖分析(Gelly)

    支持關系數(shù)據(jù)處理(Table)

    支持復雜事件處理(CEP)

    整合支持

    支持Flink on YARN

    支持HDFS

    支持來自Kafka的輸入數(shù)據(jù)

    支持Apache HBase

    支持Hadoop程序

    支持Tachyon

    支持ElasticSearch

    支持RabbitMQ

    支持Apache Storm

    支持S3

    支持XtreemFS

    基本概念

    Stream & Transformation & Operator

    用戶實現(xiàn)的Flink程序是由Stream和Transformation這兩個基本構(gòu)建塊組成,其中Stream是一個中間結(jié)果數(shù)據(jù),而Transformation是一個操作,它對一個或多個輸入Stream進行計算處理,輸出一個或多個結(jié)果Stream。當一個Flink程序被執(zhí)行的時候,它會被映射為Streaming Dataflow。一個Streaming Dataflow是由一組Stream和Transformation Operator組成,它類似于一個DAG圖,在啟動的時候從一個或多個Source Operator開始,結(jié)束于一個或多個Sink Operator。下面是一個由Flink程序映射為Streaming Dataflow的示意圖,如下所示:

    比如從Source[1]到map()[1],它保持了Source的分區(qū)特性(Partitioning)和分區(qū)內(nèi)元素處理的有序性,也就是說map()[1]的Subtask看到數(shù)據(jù)流中記錄的順序,與Source[1]中看到的記錄順序是一致的。

    Redistribution模式

    這種模式改變了輸入數(shù)據(jù)流的分區(qū),比如從map()[1]、map()[2]到keyBy()/window()/apply()[1]、keyBy()/window()/apply()[2],上游的Subtask向下游的多個不同的Subtask發(fā)送數(shù)據(jù),改變了數(shù)據(jù)流的分區(qū),這與實際應用所選擇的Operator有關系。另外,Source Operator對應2個Subtask,所以并行度為2,而Sink Operator的Subtask只有1個,故而并行度為1。

    Task & Operator Chain

    在Flink分布式執(zhí)行環(huán)境中,會將多個Operator Subtask串起來組成一個Operator Chain,實際上就是一個執(zhí)行鏈,每個執(zhí)行鏈會在TaskManager上一個獨立的線程中執(zhí)行,如下圖所示:

    在Flink集群啟動的時候,TaskManager會向JobManager注冊,如果注冊成功,則JobManager會向TaskManager回復消息AcknowledgeRegistration。

    SubmitJob

    Flink程序內(nèi)部通過Client向JobManager提交Flink Job,其中在消息SubmitJob中以JobGraph形式描述了Job的基本信息。

    CancelJob

    請求取消一個Flink Job的執(zhí)行,CancelJob消息中包含了Job的ID,如果成功則返回消息CancellationSuccess,失敗則返回消息CancellationFailure。

    UpdateTaskExecutionState

    TaskManager會向JobManager請求更新ExecutionGraph中的ExecutionVertex的狀態(tài)信息,更新成功則返回true。

    RequestNextInputSplit

    運行在TaskManager上面的Task,請求獲取下一個要處理的輸入Split,成功則返回NextInputSplit。

    JobStatusChanged

    ExecutionGraph向JobManager發(fā)送該消息,用來表示Flink Job的狀態(tài)發(fā)生的變化,例如:RUNNING、CANCELING、FINISHED等。

    TaskManager

    TaskManager也是一個Actor,它是實際負責執(zhí)行計算的Worker,在其上執(zhí)行Flink Job的一組Task。每個TaskManager負責管理其所在節(jié)點上的資源信息,如內(nèi)存、磁盤、網(wǎng)絡,在啟動的時候?qū)①Y源的狀態(tài)向JobManager匯報。TaskManager端可以分成兩個階段:

    注冊階段

    TaskManager會向JobManager注冊,發(fā)送RegisterTaskManager消息,等待JobManager返回AcknowledgeRegistration,然后TaskManager就可以進行初始化過程。

    可操作階段

    該階段TaskManager可以接收并處理與Task有關的消息,如SubmitTask、CancelTask、FailTask。如果TaskManager無法連接到JobManager,這是TaskManager就失去了與JobManager的聯(lián)系,會自動進入“注冊階段”,只有完成注冊才能繼續(xù)處理Task相關的消息。

    Client

    當用戶提交一個Flink程序時,會首先創(chuàng)建一個Client,該Client首先會對用戶提交的Flink程序進行預處理,并提交到Flink集群中處理,所以Client需要從用戶提交的Flink程序配置中獲取JobManager的地址,并建立到JobManager的連接,將Flink Job提交給JobManager。Client會將用戶提交的Flink程序組裝一個JobGraph, 并且是以JobGraph的形式提交的。一個JobGraph是一個Flink Dataflow,它由多個JobVertex組成的DAG。其中,一個JobGraph包含了一個Flink程序的如下信息:JobID、Job名稱、配置信息、一組JobVertex等。

    組件棧

    Flink是一個分層架構(gòu)的系統(tǒng),每一層所包含的組件都提供了特定的抽象,用來服務于上層組件。Flink分層的組件棧如下圖所示:

    了解YARN的話,對上圖的原理非常熟悉,實際Flink也實現(xiàn)了滿足在YARN集群上運行的各個組件:Flink YARN Client負責與YARN RM通信協(xié)商資源請求,F(xiàn)link JobManager和Flink TaskManager分別申請到Container去運行各自的進程。通過上圖可以看到,YARN AM與Flink JobManager在同一個Container中,這樣AM可以知道Flink JobManager的地址,從而AM可以申請Container去啟動Flink TaskManager。待Flink成功運行在YARN集群上,F(xiàn)link YARN Client就可以提交Flink Job到Flink JobManager,并進行后續(xù)的映射、調(diào)度和計算處理。

    Runtime層

    Runtime層提供了支持Flink計算的全部核心實現(xiàn),比如:支持分布式Stream處理、JobGraph到ExecutionGraph的映射、調(diào)度等等,為上層API層提供基礎服務。

    API層

    API層主要實現(xiàn)了面向無界Stream的流處理和面向Batch的批處理API,其中面向流處理對應DataStream API,面向批處理對應DataSet API。

    Libraries層

    該層也可以稱為Flink應用框架層,根據(jù)API層的劃分,在API層之上構(gòu)建的滿足特定應用的實現(xiàn)計算框架,也分別對應于面向流處理和面向批處理兩類。面向流處理支持:CEP(復雜事件處理)、基于SQL-like的操作(基于Table的關系操作);面向批處理支持:FlinkML(機器學習庫)、Gelly(圖處理)。

    內(nèi)部原理

    容錯機制

    Flink基于Checkpoint機制實現(xiàn)容錯,它的原理是不斷地生成分布式Streaming數(shù)據(jù)流Snapshot。在流處理失敗時,通過這些Snapshot可以恢復數(shù)據(jù)流處理。理解Flink的容錯機制,首先需要了解一下Barrier這個概念:Stream Barrier是Flink分布式Snapshotting中的核心元素,它會作為數(shù)據(jù)流的記錄被同等看待,被插入到數(shù)據(jù)流中,將數(shù)據(jù)流中記錄的進行分組,并沿著數(shù)據(jù)流的方向向前推進。每個Barrier會攜帶一個Snapshot ID,屬于該Snapshot的記錄會被推向該Barrier的前方。因為Barrier非常輕量,所以并不會中斷數(shù)據(jù)流。帶有Barrier的數(shù)據(jù)流,如下圖所示:

    接收到Barrier n的Stream被臨時擱置,來自這些Stream的記錄不會被處理,而是被放在一個Buffer中

    一旦最后一個Stream接收到Barrier n,Operator會emit所有暫存在Buffer中的記錄,然后向Checkpoint Coordinator發(fā)送Snapshot n

    繼續(xù)處理來自多個Stream的記錄

    基于Stream Aligning操作能夠?qū)崿F(xiàn)Exactly Once語義,但是也會給流處理應用帶來延遲,因為為了排列對齊Barrier,會暫時緩存一部分Stream的記錄到Buffer中,尤其是在數(shù)據(jù)流并行度很高的場景下可能更加明顯,通常以最遲對齊Barrier的一個Stream為處理Buffer中緩存記錄的時刻點。在Flink中,提供了一個開關,選擇是否使用Stream Aligning,如果關掉則Exactly Once會變成At least once。

    調(diào)度機制

    在JobManager端,會接收到Client提交的JobGraph形式的Flink Job,JobManager會將一個JobGraph轉(zhuǎn)換映射為一個ExecutionGraph,如下圖所示:

    迭代機制

    機器學習和圖計算應用,都會使用到迭代計算,F(xiàn)link通過在迭代Operator中定義Step函數(shù)來實現(xiàn)迭代算法,這種迭代算法包括Iterate和Delta Iterate兩種類型,在實現(xiàn)上它們反復地在當前迭代狀態(tài)上調(diào)用Step函數(shù),直到滿足給定的條件才會停止迭代。下面,對Iterate和Delta Iterate兩種類型的迭代算法原理進行說明:

    Iterate

    Iterate Operator是一種簡單的迭代形式:每一輪迭代,Step函數(shù)的輸入或者是輸入的整個數(shù)據(jù)集,或者是上一輪迭代的結(jié)果,通過該輪迭代計算出下一輪計算所需要的輸入(也稱為Next Partial Solution),滿足迭代的終止條件后,會輸出最終迭代結(jié)果,具體執(zhí)行流程如下圖所示:

    Delta Iterate Operator實現(xiàn)了增量迭代,它的實現(xiàn)原理如下圖所示:

    另外,F(xiàn)link還提供了3個參數(shù)來配置Backpressure監(jiān)控行為:

    參數(shù)名稱

    默認值

    說明

    jobmanager.web.backpressure.refresh-interval

    60000

    默認1分鐘,表示采樣統(tǒng)計結(jié)果刷新時間間隔

    jobmanager.web.backpressure.num-samples

    100

    評估Backpressure狀態(tài),所使用的堆棧跟蹤調(diào)用次數(shù)

    jobmanager.web.backpressure.delay-between-samples

    50

    默認50毫秒,表示對一個Job的每個Task依次調(diào)用的時間間隔

    通過上面?zhèn)€定義的Backpressure狀態(tài),以及調(diào)整相應的參數(shù),可以確定當前運行的Job的狀態(tài)是否正常,并且保證不影響JobManager提供服務。

    參考鏈接

    http://flink.apache.org/

    http://flink.apache.org/features.html

    https://ci.apache.org/projects/flink/flink-docs-release-1.0/internals/general_arch.html

    http://data-artisans.com/high-throughput-low-latency-and-exactly-once-stream-processing-with-apache-flink/

    https://ci.apache.org/projects/flink/flink-docs-release-1.0/internals/stream_checkpointing.html

    https://ci.apache.org/projects/flink/flink-docs-release-1.0/internals/job_scheduling.html

    https://ci.apache.org/projects/flink/flink-docs-release-1.0/apis/streaming/event_time.html

    https://ci.apache.org/projects/flink/flink-docs-release-1.0/setup/yarn_setup.html

    https://ci.apache.org/projects/flink/flink-docs-release-1.0/setup/jobmanager_high_availability.html

    https://ci.apache.org/projects/flink/flink-docs-release-1.0/apis/streaming/libs/cep.html

    https://ci.apache.org/projects/flink/flink-docs-release-1.0/apis/batch/libs/gelly.html

    https://ci.apache.org/projects/flink/flink-docs-release-1.0/apis/batch/libs/ml/index.html

    https://ci.apache.org/projects/flink/flink-docs-release-1.0/apis/batch/libs/table.html

    https://ci.apache.org/projects/flink/flink-docs-release-1.0/apis/batch/connectors.html

    http://geek.csdn.net/news/detail/56272

    http://samza.apache.org/

    以上就是關于java實現(xiàn)快照相關問題的回答。希望能幫到你,如有更多相關問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。


    推薦閱讀:

    免費的java資源網(wǎng)站(免費的java資源網(wǎng)站有哪些)

    java實現(xiàn)接口的方法

    java培訓班學費一般多少(零基礎Java開發(fā)工程師培訓收費標準)

    vi設計包括哪些(整套vi設計都包含哪些)

    快照多少錢(一寸照片快照多少錢)