HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    java实现快照

    发布时间:2023-04-08 05:37:34     稿源: 创意岭    阅读: 72        

    大家好!今天让创意岭的小编来大家介绍下关于java实现快照的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

    开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等

    只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端

    官网:https://ai.de1919.com

    创意岭作为行业内优秀的企业,服务客户遍布全球各地,如需了解SEO相关业务请拨打电话175-8598-2043,或添加微信:1454722008

    本文目录:

    java实现快照

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

    用官方启动器显示有漏洞,可以试试第三方启动器启动例如hmcl(推荐2.3.5.4)

    更换JAVA版本

    64x可以试试32x的

    或者改用java9尝试或者改用java7

    也可以调整成debug模式修改bug(难度高)

    最简单(删了该版本重新下载)

    通过这些方法应该能达到正常游玩

    拓展延伸

    背景设定

    Minecraft是一款沙盒游戏,整个游戏没有剧情,玩家在游戏中自由建设和破坏,透过像积木一样来对元素进行组合与拼凑,轻而易举的就能制作出小木屋、城堡甚至城市,玩家可以通过自己创造的作品来体验上帝一般的感觉。在这款游戏里,不仅可以单人娱乐,还可以多人联机,玩家也可以安装一些模组来增加游戏趣味性(比如身为肝帝的我喜欢玩格雷科技。

    Minecraft着重于让玩家去探索、交互,并且改变一个由一立方米大小的方块动态生成的地图。除了方块以外,环境功能还包括植物、生物与物品。游戏里的一些活动包括采集矿石、与敌对生物战斗、合成新的方块与收集各种在游戏中找到的资源的工具。游戏中的无限制模式让玩家在各种多人游戏服务器或他们的单人模式中进行创造建筑物、作品与艺术创作。其他功能包括逻辑运算与远程动作的红石电路、矿车及轨道,,以及称之为"下界"的神秘世界。最终,可以选择前往一个叫做“末路之地”的维度旅行,并打倒末影龙。

    二、掠夺者哨塔是哪个版本更新的

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

    《我的世界》村庄与掠夺更新(又称熊猫更新),目前已经全面进入了测试阶段。基岩版1.8发布快有半个月了,JAVA版1.14终于按捺不住,发布了全新版本更新的首个快照18w43a!

    我的世界:1.14首个快照发布!首次加入凋零玫瑰,掠夺兽掉落鞍?我的世界:1.14快照发布!凋零玫瑰、掠夺者、炖汤、熊猫以及更多。

    一、JAVA版1.14概览

    此次《我的世界》JAVA版1.14的首个快照版本为18w43a,在10月24日正式发布,并且同一天发布了18w43b,第二个快照只是对第一个快照的微小修复。所以我们此次重点测评第一个快照版本更新的内容。

    我们都知道《我的世界》JAVA版是Minecraft更新的主旋律,所有版本的MC都最终同JAVA版保持一致。并且JAVA版第一个快照更新内容就比基岩版不知道多出多少倍!那么此次1.14首个快照究竟更新了哪些内容呢?

    二、凋零玫瑰

    此次《我的世界》JAVA版快照加入了一朵非常有意思的花——凋零玫瑰。这朵花非常不平凡,看名字就知道会与凋灵有关,所以小编单独拎出来仔细说一下。(另外还新增了矢车菊和铃兰两朵花,没什么用就不细说了)

    凋零玫瑰:被凋灵BOSS杀死的非亡灵生物,都会变成一朵凋零玫瑰。例如牛、羊、村民等等这一类生物,而僵尸、幻翼、骷髅等等此类亡灵生物不行,因为凋灵也是亡灵;

    凋零效果:凋零玫瑰会对周围的生物、怪物、或者是玩家造成1秒的凋零效果,这个特性,让我想到了一个全新的“凋零玫瑰陷阱”,走入凋灵花丛的生物会持续扣血直至死亡;

    凋灵无法摧毁:凋灵BOSS的攻击是无法摧毁凋零玫瑰的,似乎这朵花会受到凋灵保护一样;

    三、掠夺兽是坐骑么?

    此次《我的世界》1.14首发的快照,并没有给玩家太多关于掠夺兽的信息。至少没有揭开掠夺兽是非可以成为坐骑的消息。关于掠夺者,我们倒是可以近距离看一下。因为之前的基岩版都还没有加入它们!

    Pillager beast:官方翻译还没出来,我们姑且先叫做掠夺兽吧。生命值100,攻击行为就是冲撞,目标是破坏农田杀死村民。但此次放出一个全新的特性,玩家杀死掠夺兽,100%掉落鞍!但100生命值,可不是那么好杀的哦。

    Pillager:掠夺者,他存在的目的就是击杀村民。死亡后的掉落物为:1、绿宝石,2、武器弓弩。

    四、熊猫和竹林

    前期小编针对《我的世界》基岩版测试版中的熊猫做过非常多的测试和说明了。仔细对比了下,发现JAVA版的熊猫略微有些差异。但目前版本,熊猫暂时还无法自然生成。也就是说,熊猫会在后续快照中持续的优化和更新。

    但目前可以确定的是,小熊猫在打喷嚏的时候,确定会有几率打出一个粘液球出来哦。养熊猫刷粘液球,哇咔咔。并且两只大熊猫生下的小熊猫会移除父母的种类和基因,这个特性还是比较有意思的。

    五、织布机

    织布机是《我的世界》1.14快照放出的一个全新工具,是染色系统的一个全新尝试吧。2根线 2块木板即可合成,作用就是用来给旗帜染上各种各样的图案。所以原本的用工作台染色的合成系统,已经全部移除了。这个有点类似当年基岩版的“切石机”。所以如果织布机没有更多的用途的话,说不定将来也会被移除吧。

    六、奇怪的炖汤(食物)

    Suspicious stew(奇怪的炖汤),这是一个煲的名字,暂无中文译名。《我的世界》1.14新加入的一个非常神奇的食物。为什么说它神奇呢,因为玩家用不同的花合成的这个煲,玩家吃下去后,所产生的效果也是不同的。

    合成:红蘑菇 棕蘑菇 碗 花来合成。合成后,该煲有一个基础特性是恢复6点饥饿值,和附加1个5秒的效果;

    花的效果:滨菊=生命恢复、绒球葱=防火、矢车菊=跳跃提升、虞美人=速度、铃兰=中毒、凋零玫瑰=凋零、郁金香=虚弱、茜草花=失明、兰花=饱和、蒲公英=饱和。

    七、方块更新

    最后来聊一聊《我的世界》方块的更新,这次更新,真的是更新到了小编的心里。尤其是墙和告示牌的更新,大爱啊,各种墙真的是非常的美丽,从此告别单调的圆石墙。此次新增了5种材质的告示牌,14种台阶,14种楼梯,11种材质的墙。这些绝对是Minecraft建筑党的最爱!

    本次《我的世界》1.14快照带来了非常多令人惊喜的全新更新,暂时先介绍这么多吧。要知道村庄还没开始更新呢哦!另外此次也重新编写了Minecraft的光照系统,小编也会持续带来1.14最新快照版本的测试与体验

    三、如何分析线程堆栈

    JVM线程堆栈是一个给定时间的快照,它能向你提供所有被创建出来的Java线程的完整清单.

    每一个被发现的Java线程都会给你如下信息:

    – 线程的名称;经常被中间件厂商用来识别线程的标识,一般还会带上被分配的线程池名称以及状态 (运行,阻塞等等.)

    – 线程类型 & 优先级,例如 : daemon prio=3 ** 中间件程序一般以后台守护的形式创建他们的线程,这意味着这些线程是在后台运行的;它们会向它们的用户提供服务,例如:向你的Java EE应用程序 **

    – Java线程ID,例如 : tid=0x000000011e52a800 ** 这是通过 java.lang.Thread.getId() 获得的Java线程ID,它常常用自增长的长整形 1..n** 实现

    – 原生线程ID,例如 : nid=0x251c** ,之所以关键是因为原生线程ID可以让你获得诸如从操作系统的角度来看那个线程在你的JVM中使用了大部分的CPU时间等这样的相关信息. **

    – Java线程状态和详细信息,例如: waiting for monitor entry [0xfffffffea5afb000] java.lang.Thread.State: BLOCKED (on object monitor)

    ** 可以快速的了解到线程状态极其当前阻塞的可能原因 **

    – Java线程栈跟踪;这是目前为止你能从线程堆栈中找到的最重要的数据. 这也是你花费最多分析时间的地方,因为Java栈跟踪向提供了你将会在稍后的练习环节了解到的导致诸多类型的问题的根本原因,所需要的90%的信息。

    – Java 堆内存分解; 从HotSpot VM 1.6版本开始,在线程堆栈的末尾处可以看到HotSpot的内存使用情况,比如说Java的堆内存(YoungGen, OldGen) & PermGen 空间。这个信息对分析由于频繁GC而引起的问题时,是很有用的。你可以使用已知的线程数据或模式做一个快速的定位。

    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上的线程堆栈信息和线程池做了详细的拆解,如下图所示:

    上图中可以看出线程堆栈是由多个不同部分组成的。这些信息对问题分析都很重要,但对不同的问题模式的分析会使用不同的部分(问题模式会在后面的文章中做模拟和演示。)

    现在通过这个分析样例,给大家详细解释一下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 中间件,第三方以及自定义应用软件中的线程

    这个部分是整个线程堆栈的核心部分,也是通常需要花费最多分析时间的部分。堆栈中线程的个数取决你使用的中间件,第三方库(可能会有独立线程)以及你的应用程序(如果创建自定义线程,这通常不是一个很好的实践)。

    在我们的示例线程堆栈中,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管理的内部线程,用于执行内部的原生操作。一般你不用对此操太多心,除非你(通过相关的线程堆栈以及 prstat或者原生线程Id)发现很高的CPU占用率.

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

    # HotSpot GC 线程

    当使用 HotSpot 进行并行 GC (如今在使用多个物理核心的环境下很常见), 默认创建的HotSpot VM 或者每个JVM管理一个有特定标识的GC线程时. 这些GC线程可以让VM以并行的方式执行其周期性的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

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

    这事非常关键的数据,因为当你遇到跟GC有关的问题,诸如过度GC、内存泄露等问题是,你将可以利用这些线程的原生Id值关联的操作系统或者Java线程,进而发现任何对CPI时间的高占用. 未来的文章你将会了解到如何识别并诊断这样的问题.

    # JNI 全局引用计数

    JNI (Java 本地接口)的全局引用就是从本地代码到由Java垃圾收集器管理的Java对象的基本的对象引用. 它的角色就是阻止对仍然在被本地代码使用,但是技术上已经不是Java代码中的“活动的”引用了的对象的垃圾收集.

    同时为了侦测JNI相关的泄露而留意JNI引用也很重要. 如果你的程序直接使用了JNI,或者像监听器这样的第三方工具,就容易造成本地的内存泄露.

    JNI global references: 1925

    # Java 堆栈使用视图

    这些数据被添加回了 JDK 1 .6 ,向你提供有关Hotspot堆栈的一个简短而快速的视图. 我发现它在当我处理带有过高CPU占用的GC相关的问题时非常有用,你可以在一个单独的快照中同时看到线程堆栈以及Java堆的信息,让你当时就可以在一个特定的Java堆内存空间中解析(或者排除)出任何的关键点. 你如在我们的示例线程堆栈中所见,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:特性、概念、组件栈、架构及原理分析

    简单之美 | Apache Flink:特性、概念、组件栈、架构及原理分析

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

    Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时(Flink Runtime),提供支持流处理和批处理两种类型应用的功能。现有的开源计算方案,会把流处理和批处理作为两种不同的应用类型,因为他们它们所提供的SLA是完全不相同的:流处理一般需要支持低延迟、Exactly-once保证,而批处理需要支持高吞吐、高效处理,所以在实现的时候通常是分别给出两套实现方法,或者通过一个独立的开源框架来实现其中每一种处理方案。例如,实现批处理的开源方案有MapReduce、Tez、Crunch、Spark,实现流处理的开源方案有Samza、Storm。Flink在实现流处理和批处理时,与传统的一些方案完全不同,它从另一个视角看待流处理和批处理,将二者统一起来:Flink是完全支持流处理,也就是说作为流处理看待时输入数据流是无界的;批处理被作为一种特殊的流处理,只是它的输入数据流被定义为有界的。基于同一个Flink运行时(Flink Runtime),分别提供了流处理和批处理API,而这两种API也是实现上层面向流处理、批处理类型应用框架的基础。

    基本特性

    关于Flink所支持的特性,我这里只是通过分类的方式简单做一下梳理,涉及到具体的一些概念及其原理会在后面的部分做详细说明。

    流处理特性

    支持高吞吐、低延迟、高性能的流处理

    支持带有事件时间的窗口(Window)操作

    支持有状态计算的Exactly-once语义

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

    支持具有Backpressure功能的持续流模型

    支持基于轻量级分布式快照(Snapshot)实现的容错

    一个运行时同时支持Batch on Streaming处理和Streaming处理

    Flink在JVM内部实现了自己的内存管理

    支持迭代计算

    支持程序自动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存

    API支持

    对Streaming数据类应用,提供DataStream API

    对批处理类应用,提供DataSet API(支持Java/Scala)

    Libraries支持

    支持机器学习(FlinkML)

    支持图分析(Gelly)

    支持关系数据处理(Table)

    支持复杂事件处理(CEP)

    整合支持

    支持Flink on YARN

    支持HDFS

    支持来自Kafka的输入数据

    支持Apache HBase

    支持Hadoop程序

    支持Tachyon

    支持ElasticSearch

    支持RabbitMQ

    支持Apache Storm

    支持S3

    支持XtreemFS

    基本概念

    Stream & Transformation & Operator

    用户实现的Flink程序是由Stream和Transformation这两个基本构建块组成,其中Stream是一个中间结果数据,而Transformation是一个操作,它对一个或多个输入Stream进行计算处理,输出一个或多个结果Stream。当一个Flink程序被执行的时候,它会被映射为Streaming Dataflow。一个Streaming Dataflow是由一组Stream和Transformation Operator组成,它类似于一个DAG图,在启动的时候从一个或多个Source Operator开始,结束于一个或多个Sink Operator。下面是一个由Flink程序映射为Streaming Dataflow的示意图,如下所示:

    比如从Source[1]到map()[1],它保持了Source的分区特性(Partitioning)和分区内元素处理的有序性,也就是说map()[1]的Subtask看到数据流中记录的顺序,与Source[1]中看到的记录顺序是一致的。

    Redistribution模式

    这种模式改变了输入数据流的分区,比如从map()[1]、map()[2]到keyBy()/window()/apply()[1]、keyBy()/window()/apply()[2],上游的Subtask向下游的多个不同的Subtask发送数据,改变了数据流的分区,这与实际应用所选择的Operator有关系。另外,Source Operator对应2个Subtask,所以并行度为2,而Sink Operator的Subtask只有1个,故而并行度为1。

    Task & Operator Chain

    在Flink分布式执行环境中,会将多个Operator Subtask串起来组成一个Operator Chain,实际上就是一个执行链,每个执行链会在TaskManager上一个独立的线程中执行,如下图所示:

    在Flink集群启动的时候,TaskManager会向JobManager注册,如果注册成功,则JobManager会向TaskManager回复消息AcknowledgeRegistration。

    SubmitJob

    Flink程序内部通过Client向JobManager提交Flink Job,其中在消息SubmitJob中以JobGraph形式描述了Job的基本信息。

    CancelJob

    请求取消一个Flink Job的执行,CancelJob消息中包含了Job的ID,如果成功则返回消息CancellationSuccess,失败则返回消息CancellationFailure。

    UpdateTaskExecutionState

    TaskManager会向JobManager请求更新ExecutionGraph中的ExecutionVertex的状态信息,更新成功则返回true。

    RequestNextInputSplit

    运行在TaskManager上面的Task,请求获取下一个要处理的输入Split,成功则返回NextInputSplit。

    JobStatusChanged

    ExecutionGraph向JobManager发送该消息,用来表示Flink Job的状态发生的变化,例如:RUNNING、CANCELING、FINISHED等。

    TaskManager

    TaskManager也是一个Actor,它是实际负责执行计算的Worker,在其上执行Flink Job的一组Task。每个TaskManager负责管理其所在节点上的资源信息,如内存、磁盘、网络,在启动的时候将资源的状态向JobManager汇报。TaskManager端可以分成两个阶段:

    注册阶段

    TaskManager会向JobManager注册,发送RegisterTaskManager消息,等待JobManager返回AcknowledgeRegistration,然后TaskManager就可以进行初始化过程。

    可操作阶段

    该阶段TaskManager可以接收并处理与Task有关的消息,如SubmitTask、CancelTask、FailTask。如果TaskManager无法连接到JobManager,这是TaskManager就失去了与JobManager的联系,会自动进入“注册阶段”,只有完成注册才能继续处理Task相关的消息。

    Client

    当用户提交一个Flink程序时,会首先创建一个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是一个分层架构的系统,每一层所包含的组件都提供了特定的抽象,用来服务于上层组件。Flink分层的组件栈如下图所示:

    了解YARN的话,对上图的原理非常熟悉,实际Flink也实现了满足在YARN集群上运行的各个组件:Flink YARN Client负责与YARN RM通信协商资源请求,Flink JobManager和Flink TaskManager分别申请到Container去运行各自的进程。通过上图可以看到,YARN AM与Flink JobManager在同一个Container中,这样AM可以知道Flink JobManager的地址,从而AM可以申请Container去启动Flink TaskManager。待Flink成功运行在YARN集群上,Flink YARN Client就可以提交Flink Job到Flink JobManager,并进行后续的映射、调度和计算处理。

    Runtime层

    Runtime层提供了支持Flink计算的全部核心实现,比如:支持分布式Stream处理、JobGraph到ExecutionGraph的映射、调度等等,为上层API层提供基础服务。

    API层

    API层主要实现了面向无界Stream的流处理和面向Batch的批处理API,其中面向流处理对应DataStream API,面向批处理对应DataSet API。

    Libraries层

    该层也可以称为Flink应用框架层,根据API层的划分,在API层之上构建的满足特定应用的实现计算框架,也分别对应于面向流处理和面向批处理两类。面向流处理支持:CEP(复杂事件处理)、基于SQL-like的操作(基于Table的关系操作);面向批处理支持:FlinkML(机器学习库)、Gelly(图处理)。

    内部原理

    容错机制

    Flink基于Checkpoint机制实现容错,它的原理是不断地生成分布式Streaming数据流Snapshot。在流处理失败时,通过这些Snapshot可以恢复数据流处理。理解Flink的容错机制,首先需要了解一下Barrier这个概念:Stream Barrier是Flink分布式Snapshotting中的核心元素,它会作为数据流的记录被同等看待,被插入到数据流中,将数据流中记录的进行分组,并沿着数据流的方向向前推进。每个Barrier会携带一个Snapshot ID,属于该Snapshot的记录会被推向该Barrier的前方。因为Barrier非常轻量,所以并不会中断数据流。带有Barrier的数据流,如下图所示:

    接收到Barrier n的Stream被临时搁置,来自这些Stream的记录不会被处理,而是被放在一个Buffer中

    一旦最后一个Stream接收到Barrier n,Operator会emit所有暂存在Buffer中的记录,然后向Checkpoint Coordinator发送Snapshot n

    继续处理来自多个Stream的记录

    基于Stream Aligning操作能够实现Exactly Once语义,但是也会给流处理应用带来延迟,因为为了排列对齐Barrier,会暂时缓存一部分Stream的记录到Buffer中,尤其是在数据流并行度很高的场景下可能更加明显,通常以最迟对齐Barrier的一个Stream为处理Buffer中缓存记录的时刻点。在Flink中,提供了一个开关,选择是否使用Stream Aligning,如果关掉则Exactly Once会变成At least once。

    调度机制

    在JobManager端,会接收到Client提交的JobGraph形式的Flink Job,JobManager会将一个JobGraph转换映射为一个ExecutionGraph,如下图所示:

    迭代机制

    机器学习和图计算应用,都会使用到迭代计算,Flink通过在迭代Operator中定义Step函数来实现迭代算法,这种迭代算法包括Iterate和Delta Iterate两种类型,在实现上它们反复地在当前迭代状态上调用Step函数,直到满足给定的条件才会停止迭代。下面,对Iterate和Delta Iterate两种类型的迭代算法原理进行说明:

    Iterate

    Iterate Operator是一种简单的迭代形式:每一轮迭代,Step函数的输入或者是输入的整个数据集,或者是上一轮迭代的结果,通过该轮迭代计算出下一轮计算所需要的输入(也称为Next Partial Solution),满足迭代的终止条件后,会输出最终迭代结果,具体执行流程如下图所示:

    Delta Iterate Operator实现了增量迭代,它的实现原理如下图所示:

    另外,Flink还提供了3个参数来配置Backpressure监控行为:

    参数名称

    默认值

    说明

    jobmanager.web.backpressure.refresh-interval

    60000

    默认1分钟,表示采样统计结果刷新时间间隔

    jobmanager.web.backpressure.num-samples

    100

    评估Backpressure状态,所使用的堆栈跟踪调用次数

    jobmanager.web.backpressure.delay-between-samples

    50

    默认50毫秒,表示对一个Job的每个Task依次调用的时间间隔

    通过上面个定义的Backpressure状态,以及调整相应的参数,可以确定当前运行的Job的状态是否正常,并且保证不影响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实现快照相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。


    推荐阅读:

    免费的java资源网站(免费的java资源网站有哪些)

    java实现接口的方法

    java培训班学费一般多少(零基础Java开发工程师培训收费标准)

    vi设计包括哪些(整套vi设计都包含哪些)

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