头条

导航 导航

大江 > 鞋包 >正文

淮南市哪里可以买到药流的药

2019-09-21 08:35 编辑:达书峰

淮南市哪里可以买到药流的药,上海米非司酮药店有卖吗,吉林流产药多少钱一盒,长春市哪里可以买到米非米索,湘潭市去哪能买到流产药

  ? ? 反压机制(BackPressure)被广泛应用到实时流处理系统中,流处理系统需要能优雅地处理反压(backpressure)问题〈压通锄生于这样场景:短时负载高峰导致系统接收数据速率远高于它处理数据速率。许多日常问题都会导致反压,例如,垃圾回收唾可能会导致流入数据快速堆积,或者遇到大促或秒杀活动导致流量陡增〈压如果不能得到正确处理,可能会导致资源耗尽甚至系统崩溃〈压机制就指系统能够自己检测到被阻塞Operator,然后系统自适应地降低源头或者上游发送速率。目前主流流处理系统 Apache Storm、JStorm、Spark Streaming、S、Apache Flink、Twitter Heron都采用反压机制解决这个问题,不过他们实现各自不同。

  不同组件可以不同速度执行(并且每个组件中处理速度随时间改变)。 例如,考虑个工作流程,或由于数据倾斜或任务调度而导致数据被处理十分缓慢。 在这种情况下,如果上游阶段不减速,将导致缓冲区建立长队列,或导致系统丢弃元组。 如果元组在中途丢弃,那么效率可能会有损失,因为已经为这些元组产生计算被浪费、且在些流处理系统中比如Strom,会将这些丢失元组重新发送,这样会导致数据致性问题,并够岬贾履承㎡perator状态叠加。进而整个程序输出结果不准确≮二由于系统接收数据速率随着时间改变,短时负载高峰导致系统接收数据速率远高于它处理数据速率情况,也会导致Tuple在中途丢失。所以实时流处理系统必须能够解决发送速率远大于系统能处理速率这个问题,大多数实时流处理系统采用反压(BackPressure)机制解决这个问题。下面我们就来介绍下不同实时流处理系统采用反压机制:

  对于开启acker机制storm程序,可以通过设置conf.setMaxSpoutPending参数来实现反压效果,如果下游组件(bolt)处理速度跟不上导致spout发送tuple没有及时确认数超过参数设定值,spout会停症送数据,这种方式缺点很难调优conf.setMaxSpoutPending参数设置以达到最好反压效果,设小会导致吞吐上不去,设大会导致worker OOM;有震荡,数据流会处于个颠簸状态,效果不如逐级反压;另外对于关闭acker机制程序无效;

  新storm自动反压机制(Automatic Back Pressure)通过监控bolt中接收队列情况,当超过高水位值时专门线程会将反压信息写到 Zookeeper ,Zookeeper上watch会通知该拓扑所有Worker都进入反压状态,最后Spout降低tuple发送速度。

  每个Executor都有个接受队列和发送队列用来接收Tuple和发送Spout或者Bolt生成Tuple元组。每个Worker进程都有个单接收线程监听接收端口。它从每个网络上进来消息发送到Executor接收队列中。Executor接收队列存放Worker或者Worker内部其他Executor发过来消息。Executor工作线程从接收队列中拿出数据,然后调用execute方法,发送Tuple到Executor发送队列。Executor发送线程从发送队列中获取消息,按照消息目地址选择发送到Worker传输队列中或者其他Executor接收队列中。最后Worker发送线程从传输队列中读取消息,然后将Tuple元组发送到网络中。

  .? 当Worker进程中Executor线程发现自己接收队列满时,也就接收队列达到high watermark阈值后,因此它会发送通知消息到背压线程。

  . 背压线程将当前worker进程信息注册到ZookeeperZnode节点中。具体路径就 /Backpressure/topo/wk下

  . ZookeepreZnode Watcher监视/Backpreesure/topo下节点目录变化情况,如果发现目录增加znode节点说明或者其他变化。这就说明该Topo需要反压控制,然后它会通知Topo所有Worker进入反压状态。

  .最终Spout降低tuple发送速度。

  Jstorm做两级反压,第级和Jstorm类似,通过执行队列来监测,但不会通过ZK来协调,而通过Topology Master来协调。在队列中会标记high water mark和low water mark,当执行队列超过high water mark时,就认为bolt来不及处理,则向TM发条控制消息,上游开始减慢发送速率,直到下游低于low water mark时解除反压。

  ? ? ? ? 此外,在Netty层也做级反压,由于每个Worker Task都有自己发送和接收缓冲区,可以对缓冲区设定限额、控制大小,如果spout数据量特别大,缓冲区填满会导致下游bolt接收缓冲区填满,造成反压。

  限流机制:jstorm限流机制, 当下游bolt发生阻塞时, 并且阻塞task比例超过某个比例时(现在默认设置为.),触发反压

  限流方式:计算阻塞Task地方执行线程执行时间,Spout每发送个tuple等待相应时间,然后讲这个时间发送给Spout,? 于, spout每发送个tuple,就会等待这个执行时间。

  Task阻塞判断方式:在jstorm 连续次采样周期中采样,队列情况,当队列超过%(可以设置)时,即可认为该task处在阻塞状态。

  默认情况下,Spark Streaming通过Receiver以生产者生产数据速率接收数据,计算过程中会出现batch processing time > batch interval情况,其中batch processing time 为实际计算个批次花费时间, batch interval为Streaming应用设置批处理间隔。这意味着Spark Streaming数据接收速率高于Spark从队列中移除数据速率,也就数据处理能力低,在设置间隔内不能完全处理当前接收速率接收数据。如果这种情况持续过长时间,会造成数据在内存中堆积,导致Receiver所在Executor内存溢出等问题(如果设置StorageLevel包含disk, 则内存存放不下数据会溢写至disk, 加大延迟)。Spark .以前版本,用户如果要限制Receiver数据接收速率,可以通过设置静态配制参数“spark.streaming.receiver.maxRate”值来实现,此举虽然可以通过限制接收速率,来适配当前处理能力,防止内存溢出,但也会引入其它问题∪如:producer数据生产高于maxRate,当前集群处理能力也高于maxRate,这就会造成资源利用率下降等问题。为更好协调数据接收速率与资源处理能力,Spark Streaming 从v.开始引入反压机制(back-pressure),通过动态控制数据接收速率来适配集群数据处理能力。

  Spark Streaming Backpressure:? 根据JobScheduler反馈作业执行信息来动态调整Receiver数据接收率。通过属性“spark.streaming.backpressure.enabled”来控制否启用backpressure机制,默认值false,即不启用。

  SparkStreaming 架构图如下所示:?

  SparkStreaming 反压过程执行如下往示:

  在原架构基础上加上个新组件RateController,这个组件负责监听“OnBatchCompleted”事件,然后从中抽取processingDelay 及schedulingDelay信息.? Estimator依据这些信息估算出最大处理速度(rate),最后由基于ReceiverInput Stream将rate通过ReceiverTracker与ReceiverSupervisorImpl转发给BlockGenerator(继承自RateLimiter).

  当下游处理速度跟不上上游发送速度时,旦StreamManager 发现个或多个Heron Instance 速度变慢,立刻对本地spout进行降级,降低本地Spout发送速度, 停止从这些spout读取数据、且受影响StreamManager? 会发送个特殊start backpressure message 给其他StreamManager?,要求他们对spout进行本地降级。?当其他StreamManager接收到这个特殊消息时,他们通过不读取当地Spout中Tuple来进行降级。旦出问题Heron Instance?恢复速度后,本地SM 会发送stop backpressure message 解除降级。

  很多Socket Channel与应用程序级别Buffer相关联,该缓冲区由high watermark 和low watermark组成。 当缓冲区大小达到high watermark时触发反压,并敝有效,直到缓冲区大小低于low watermark。 此设计基本原理防止拓扑在进入和退出背压缓解模式之间快速振荡。

  Flink 没有使用任何复杂机制来解决反压问题,因为根本不需要那样方案!它利用自身作为纯数据流引擎优势来优雅地响应反压问题。下面我们会深入分析 Flink 如何在 Task 之间传输数据,以及数据流如何实现自然降速。

  Flink 在运行时主要由 operators 和 streams 两大组件构成。每个 operator 会消费中间态流,并在流上进行转换,然后生成新流≡于 Flink 网络机制种形象类比,Flink 使用高效有界分布式阻塞队列,就像 Java 通用阻塞队列(BlockingQueue)样。还记得经典线程间通信案例:生产者消费者模型吗?使用 BlockingQueue 话,个较慢接受者会降低发送者发送速率,因为旦队列满(有界队列)发送者会被阻塞。Flink 解决反压方案就这种感觉。

  在 Flink 中,这些分布式阻塞队列就这些逻辑流,而队列容量通过缓冲池来(LocalBufferPool)实现。每个被生产和被消费流都会被分配个缓冲池。缓冲池管理着组缓冲(Buffer),缓冲在被消费后可以被回收循环利用。这很好理解:你从池子中拿走个缓冲,填上数据,在数据消费完之后,又把缓冲还给池子,之后你可以再次使用它。

  如下往示展示 Flink 在网络传输场景下内存管理。网络上传输数据会写到 Task  InputGate(IG) 中,经过 Task 处理后,再由 Task 写到 ResultPartition(RS) 中。每个 Task 都包括输入和输入,输入和输出数据存在 Buffer 中(都字节数据)。Buffer  MemorySegment 包装类。

  TaskManager(TM)在启动时,会先初始化NetworkEnvironment对象,TM 中所有与网络相关东西都由该类来管理(如 Netty 连接),其中就包括NetworkBufferPool※据配置,Flink 会在 NetworkBufferPool 中生成定数量(默认个)内存块 MemorySegment(关于 Flink 内存管理,后续文章会详细谈到),内存块总数量就代表网络传输中所有可用内存。NetworkEnvironment 和 NetworkBufferPool  Task 之间共享,每个 TM 只会实例化个。Task 线程启动时,会向 NetworkEnvironment 注册,NetworkEnvironment 会为 Task  InputGate(IG)和 ResultPartition(RP) 分别创建个 LocalBufferPool(缓冲池)并设置可申请 MemorySegment(内存块)数量。IG 对应缓冲池初始内存块数量与 IG 中 InputChannel 数量致,RP 对应缓冲池初始内存块数量与 RP 中 ResultSubpartition 数量致』过,每当创建或销毁缓冲池时,NetworkBufferPool 会计算剩余空闲内存块数量,并平均分配给已创建缓冲池。注意,这个过程只指定缓冲池所能使用内存块数量,并没有真正分配内存块,只有当需要时才分配。为什么要动态地为缓冲池扩容呢?因为内存越多,意味着系统可以更轻松地应对瞬时压力(如GC),不会频繁地进入反压状态,所以我们要利用起那部分闲置内存块。在 Task 线程执行过程中,当 Netty 接收端收到数据时,为将 Netty 中数据拷贝到 Task 中,InputChannel(实际 RemoteInputChannel)会向其对应缓冲池申请内存块(上图中①)。如果缓冲池中也没有可用内存块且已申请数量还没到池子上限,则会向 NetworkBufferPool 申请内存块(上图中②)并交给 InputChannel 填上数据(上图中③和④)。如果缓冲池已申请数量达到上限呢?或者 NetworkBufferPool 也没有可用内存块呢?这时候,Task  Netty Channel 会暂土取,上游发送端会立即响应停症送,拓扑会进入反压状态” Task 线程写数据到 ResultPartition 时,也会向缓冲池请求内存块,如果没有可用内存块时,会阻塞在请求内存块地方,达到暂停写入目”个内存块被消费完成之后(在输入端指内存块中字节被反序列化成对象,在输出端指内存块中字节写入到 Netty Channel ),会调用 Buffer.recycle() 方法,会将内存块还给 LocalBufferPool (上图中⑤)。如果LocalBufferPool中当前申请数量超过池子容量(由于上文提到动态容量,由于新注册 Task 导致该池子容量变小),则LocalBufferPool会将该内存块回收给 NetworkBufferPool(上图中⑥)。如果没超过池子容量,则会继续留在池子中,减少反复申请开销。

  下面这张图简单展示两个 Task 之间数据传输以及 Flink 如何感知到反压:

  记录“A”进入 Flink 并且被 Task 处理。(这里省略 Netty 接收、反序列化等过程)记录被序列化到 buffer 中∶ buffer 被发送到 Task ,然后 Task 从这个 buffer 中读出记录』要忘:记录能被 Flink 处理前提,必须有空闲可用 Buffer。

  结合上面两张图看:Task 在输出端有个相关联 LocalBufferPool(称缓冲池),Task 在输入端也有个相关联 LocalBufferPool(称缓冲池)。如果缓冲池中有空闲可用 buffer 来序列化记录 “A”,我们就序列化并发送该 buffer。

  这里我们需要注意两个场景:

  本地传输:如果 Task 和 Task 运行在同个 worker 节点(TaskManager),该 buffer 可以直接交给下个 Task。旦 Task 消费该 buffer,则该 buffer 会被缓冲池回收。如果 Task 速度比 慢,那么 buffer 回收速度就会赶不上 Task 取 buffer 速度,导致缓冲池无可用 buffer,Task 等待在可用 buffer 上。最终形成 Task 降速。远程传输:如果 Task 和 Task 运行在不同 worker 节点上,那么 buffer 会在发送到网络(TCP Channel)后被回收。在接收端,会从 LocalBufferPool 中申请 buffer,然后拷贝网络中数据到 buffer 中。如果没有可用 buffer,会停止从 TCP 连接中读取数据。在输出端,通过 Netty 水位值机制来保证不往网络中写入太多数据(后面会说)。如果网络中数据(Netty输出缓冲中字节数)超过高水位值,我们会等到其降到低水位值以下才继续写入数据。这保证网络中不会有太多数据。如果接收端停止消费网络中数据(由于接收端缓冲池没有可用 buffer),网络中缓冲数据就会堆积,那么发送端也会暂廷送。另外,这会使得发送端缓冲池得不到回收,writer 阻塞在向 LocalBufferPool 请求 buffer,阻塞 writer 往 ResultSubPartition 写数据。这种固定大小缓冲池就像阻塞队列样,保证 Flink 有套健壮反压机制,使得 Task 生产数据速度不会快于消费速度。我们上面描述这个方案可以从两个 Task 之间数据传输自然地扩展到更复杂 pipeline 中,保证反压机制可以扩散到整个 pipeline。

  另外,官方博客中为展示反压效果,给出个简单实验。下面这张图显示:随着时间改变,生产者(黄色线)和消费者(绿色线)每秒平均吞吐与最大吞吐(在单JVM中每秒达到百万条记录)百分比。我们通过衡量task每秒钟处理记录数来衡量平均吞吐∶实验运行在单 JVM 中,不过使用完整 Flink 功能栈。

  首先,我们运行生产task到它最大生产速度%(我们通过Thread.sleep()来模拟降速)。消费者以同样速度处理数据。然后,我们将消费task速度降至其最高速度%。你就会看到背压问题产生,正如我们所见,生产者速度也自然降至其最高速度%。接着,停止消费task人为降速,之后生产者和消费者task都达到其最大吞吐。接下来,我们再次将消费者速度降至%,pipeline给出立即响应:生产者速度也被自动降至%。最后,我们再次停止限速,两个task也再次恢复%速度。总而言之,我们可以看到:生产者和消费者在 pipeline 中处理都在跟随彼此吞吐而进行适当调整,这就我们希望看到反压效果。

  在 Storm/JStorm 中,只要监控到队列满,就可以记录下拓扑进入反压~ Flink 反压太过于天然,导致我们无法简单地通过监控队列来监控反压状态。Flink 在这里使用个 trick 来实现对反压监控。如果个 Task 因为反压而降速,那么它会卡在向申请内存块上。那么这时候,该 Task  stack trace 就会长下面这样:

  那么事情就简单。通过不断地采样每个 task  stack trace 就可以实现反压监控。

  Flink 实现中,只有当 Web 页面切换到某个 Job  Backpressure 页面,才会对这个 Job 触发反压检测,因为反压检测还挺昂贵。JobManager 会通过 Akka 给每个 TaskManager 发送消息。默认情况下,TaskManager 会触发次 stack trace 采样,每次间隔 ms(也就说次反压检测至少要等待秒钟)、将这 次采样结果返回给 JobManager,由 JobManager 来计算反压比率(反压出现次数/采样次数),最终展现在 UI 上。UI 刷新默认周期分钟,目不对 TaskManager 造成太大负担。

  Flink 不需要种特殊机制来处理反压,因为 Flink 中数据传输相当于已经提供应对反压机制。因此,Flink 所能获得最大吞吐量由其 pipeline 中最慢组件决定。相对于 Storm/JStorm 实现,Flink 实现更为简洁优雅,源码中也看不见与反压相关代码,无需 Zookeeper/TopologyMaster 参与也降低系统负载,也利于对反压更迅速响应。

相关资讯

新加坡南洋理工学院领导到省邮电学校考察交流

09-21 08:35

顺治出家与董小宛入宫之谜有结论了?学者新著论证

09-21 08:35

北京有望增加两处4A级景区

09-21 08:35

用“AI”重新定义客服行业,打造“智慧”企业

09-21 08:35

山东淄博临淄:组织消防安全知识讲座

09-21 08:35

新疆气象台昨日发布寒潮、道路结冰、大雾三大预警

09-21 08:35

西凤年份酒启动召回“双十一”各大网购平台未见其踪

09-21 08:35

全国校外培训机构治理:问题机构27万所,已整改10万

09-21 08:35

陈豪会见浙江省企业家协会会长张蔚文

09-21 08:35

千年美景诗画三峡展现新风采

09-21 08:35

东方红睿阳混合基金份额持有人大会11月20日至12月13日召开

09-21 08:35

运管所副所长被非法摩的司机刺死事件的背后

09-21 08:35

中华人民共和国公共图书馆法

09-21 08:35

后怕!印度飞行员欲醉驾民航客机起飞前被拦下

09-21 08:35

【视频】艺路芬芳,省妇女儿童活动中心第十三届少儿艺术节欢乐开幕(图文)

09-21 08:35

探访云南高校鸡文化博物馆“鸡博士”科普先有蛋还是先有鸡

09-21 08:35

申花8年工体不胜,施帅要用美丽足球回馈球迷

09-21 08:35

【邵阳市】将群策群力全力以赴打赢非洲猪瘟防控战

09-21 08:35

妈咪HOME最美“秋天童话”活动等你来,坐小火车畅游500亩农田

09-21 08:35

沪港通4年累计交易超10万亿元

09-21 08:35
电脑版 触屏版