当前位置: 首页 > news >正文

旅游网站建设开题报告制作wordpress导航页

旅游网站建设开题报告,制作wordpress导航页,网络营销活动推广方式,两性做受技巧视频网站周凯波(宝牛)阿里巴巴技术专家#xff0c;四川大学硕士#xff0c;2010年毕业后加入阿里搜索事业部#xff0c;从事搜索离线平台的研发工作#xff0c;参与将搜索后台数据处理架构从MapReduce到Flink的重构。目前在阿里计算平台事业部#xff0c;专注于基于Flink的一站式计… 周凯波(宝牛)阿里巴巴技术专家四川大学硕士2010年毕业后加入阿里搜索事业部从事搜索离线平台的研发工作参与将搜索后台数据处理架构从MapReduce到Flink的重构。目前在阿里计算平台事业部专注于基于Flink的一站式计算平台的建设。文章目录 1. Apache Flink 应用程序中的 Exactly-Once 语义2. Flink 应用程序端到端的 Exactly-Once 语义3. 示例 Flink 应用程序启动预提交阶段4. 在 Flink 中实现两阶段提交 Operator5. 总结Apache Flink 自2017年12月发布的1.4.0版本开始为流计算引入了一个重要的里程碑特性TwoPhaseCommitSinkFunctionhttps://issues.apache.org/jira/browse/FLINK-7210它提取了两阶段提交协议的通用逻辑使得通过 Flink 来构建端到端的 Exactly-Once 程序成为可能。同时支持一些数据源(source)和输出端(sink)包括 Apache Kafka  0.11及更高版本。它提供了一个抽象层用户只需要实现少数方法就能实现端到端的 Exactly-Once 语义。有关 TwoPhaseCommitSinkFunction 的使用详见文档: TwoPhaseCommitSinkFunction。或者可以直接阅读 Kafka 0.11 sink 的文档: kafka。https://ci.apache.org/projects/flink/flink-docs-release-1.4/api/java/org/apache/flink/streaming/api/functions/sink/TwoPhaseCommitSinkFunction.htmlhttps://ci.apache.org/projects/flink/flink-docs-release-1.4/dev/connectors/kafka.html接下来会详细分析这个新功能以及Flink的实现逻辑分为如下几点描述 Flink checkpoint 机制是如何保证 Flink 程序结果的 Exactly-Once 的显示 Flink 如何通过两阶段提交协议与数据源和数据输出端交互以提供端到端的 Exactly-Once 保证通过一个简单的示例了解如何使用 TwoPhaseCommitSinkFunction 实现 Exactly-Once 的文件输出。Flink 应用程序中的 Exactly-Once 语义当我们说『Exactly-Once』时指的是每个输入的事件只影响最终结果一次。即使机器或软件出现故障既没有重复数据也不会丢数据。Flink 很久之前就提供了 Exactly-Once 语义。在过去几年中我们对 Flink 的 checkpoint 机制有过深入的描述这是 Flink 有能力提供 Exactly-Once 语义的核心。Flink 文档还提供了该功能的全面概述https://ci.apache.org/projects/flink/flink-docs-release-1.4/ops/state/checkpoints.html在继续之前先看下对 checkpoint 机制的简要介绍这对理解后面的主题至关重要。一次 checkpoint 是以下内容的一致性快照应用程序的当前状态输入流的位置Flink 可以配置一个固定的时间点定期产生 checkpoint将 checkpoint 的数据写入持久存储系统例如 S3 或 HDFS 。将 checkpoint 数据写入持久存储是异步发生的这意味着 Flink 应用程序在 checkpoint 过程中可以继续处理数据。如果发生机器或软件故障重新启动后Flink 应用程序将从最新的 checkpoint 点恢复处理 Flink 会恢复应用程序状态将输入流回滚到上次 checkpoint 保存的位置然后重新开始运行。这意味着 Flink 可以像从未发生过故障一样计算结果。在 Flink 1.4.0 之前Exactly-Once 语义仅限于 Flink 应用程序内部并没有扩展到 Flink 数据处理完后发送的大多数外部系统。Flink 应用程序与各种数据输出端进行交互开发人员需要有能力自己维护组件的上下文来保证 Exactly-Once 语义。为了提供端到端的 Exactly-Once 语义 - 也就是说除了 Flink 应用程序内部 Flink 写入的外部系统也需要能满足 Exactly-Once 语义 - 这些外部系统必须提供提交或回滚的方法然后通过 Flink 的 checkpoint 机制来协调。分布式系统中协调提交和回滚的常用方法是两阶段提交协议。在下一节中我们将讨论 Flink 的 TwoPhaseCommitSinkFunction 是如何利用两阶段提交协议来提供端到端的 Exactly-Once 语义。Flink 应用程序端到端的 Exactly-Once 语义我们将介绍两阶段提交协议以及它如何在一个读写 Kafka 的 Flink 程序中实现端到端的 Exactly-Once 语义。Kafka 是一个流行的消息中间件经常与 Flink 一起使用。Kafka 在最近的 0.11 版本中添加了对事务的支持。这意味着现在通过 Flink 读写 Kafka并提供端到端的 Exactly-Once 语义有了必要的支持https://ci.apache.org/projects/flink/flink-docs-release-1.4/dev/connectors/kafka.html#kafka-011Flink 对端到端的 Exactly-Once 语义的支持不仅局限于 Kafka 您可以将它与任何一个提供了必要的协调机制的源/输出端一起使用。例如 Pravega来自 DELL/EMC 的开源流媒体存储系统通过 Flink 的 TwoPhaseCommitSinkFunction 也能支持端到端的 Exactly-Once 语义。exactly-once-two-phase-commit-1在今天讨论的这个示例程序中我们有从 Kafka 读取的数据源(Flink 内置的 KafkaConsumer)窗口聚合将数据写回 Kafka 的数据输出端(Flink 内置的 KafkaProducer)要使数据输出端提供 Exactly-Once 保证它必须将所有数据通过一个事务提交给 Kafka。提交捆绑了两个 checkpoint 之间的所有要写入的数据。这可确保在发生故障时能回滚写入的数据。但是在分布式系统中通常会有多个并发运行的写入任务的简单的提交或回滚是不够的因为所有组件必须在提交或回滚时“一致”才能确保一致的结果。Flink 使用两阶段提交协议及预提交阶段来解决这个问题。在 checkpoint 开始的时候即两阶段提交协议的“预提交”阶段。当 checkpoint 开始时Flink 的 JobManager 会将 checkpoint barrier(将数据流中的记录分为进入当前 checkpoint 与进入下一个 checkpoint)注入数据流。brarrier 在 operator 之间传递。对于每一个 operator它触发 operator 的状态快照写入到 state backend。exactly-once-two-phase-commit-2数据源保存消费 Kafka 的偏移量(offset)之后将 checkpoint barrier 传递给下一个 operator。这种方式仅适用于 operator 具有『内部』状态。所谓内部状态是指 Flink statebackend 保存和管理的 -例如第二个 operator 中 window 聚合算出来的 sum 值。当一个进程有它的内部状态的时候除了在 checkpoint 之前需要将数据变更写入到 state backend 不需要在预提交阶段执行任何其他操作。Flink 负责在 checkpoint 成功的情况下正确提交这些写入或者在出现故障时中止这些写入。exactly-once-two-phase-commit-3示例 Flink 应用程序启动预提交阶段但是当进程具有『外部』状态时需要作些额外的处理。外部状态通常以写入外部系统(如 Kafka)的形式出现。在这种情况下为了提供 Exactly-Once 保证外部系统必须支持事务这样才能和两阶段提交协议集成。在本文示例中的数据需要写入 Kafka因此数据输出端(Data Sink)有外部状态。在这种情况下在预提交阶段除了将其状态写入 state backend 之外数据输出端还必须预先提交其外部事务。exactly-once-two-phase-commit-4当 checkpoint barrier 在所有 operator 都传递了一遍并且触发的 checkpoint 回调成功完成时预提交阶段就结束了。所有触发的状态快照都被视为该 checkpoint 的一部分。checkpoint 是整个应用程序状态的快照包括预先提交的外部状态。如果发生故障我们可以回滚到上次成功完成快照的时间点。下一步是通知所有 operatorcheckpoint 已经成功了。这是两阶段提交协议的提交阶段JobManager 为应用程序中的每个 operator 发出 checkpoint 已完成的回调。数据源和 window operator 没有外部状态因此在提交阶段这些 operator 不必执行任何操作。但是数据输出端(Data Sink)拥有外部状态此时应该提交外部事务。exactly-once-two-phase-commit-5我们对上述知识点总结下一旦所有 operator 完成预提交就提交一个 commit。如果至少有一个预提交失败则所有其他提交都将中止我们将回滚到上一个成功完成的 checkpoint 。在预提交成功之后提交的 commit 需要保证最终成功 - operator 和外部系统都需要保障这点。如果 commit 失败(例如由于间歇性网络问题)整个 Flink 应用程序将失败应用程序将根据用户的重启策略重新启动还会尝试再提交。这个过程至关重要因为如果 commit 最终没有成功将会导致数据丢失。因此我们可以确定所有 operator 都同意 checkpoint 的最终结果所有 operator 都同意数据已提交或提交被中止并回滚。在 Flink 中实现两阶段提交 Operator完整的实现两阶段提交协议可能有点复杂这就是为什么 Flink 将它的通用逻辑提取到抽象类 TwoPhaseCommitSinkFunction 中的原因。接下来基于输出到文件的简单示例说明如何使用 TwoPhaseCommitSinkFunction 。用户只需要实现四个函数就能为数据输出端实现 Exactly-Once 语义beginTransaction - 在事务开始前我们在目标文件系统的临时目录中创建一个临时文件。随后我们可以在处理数据时将数据写入此文件。preCommit - 在预提交阶段我们刷新文件到存储关闭文件不再重新写入。我们还将为属于下一个 checkpoint 的任何后续文件写入启动一个新的事务。commit - 在提交阶段我们将预提交阶段的文件原子地移动到真正的目标目录。需要注意的是这会增加输出数据可见性的延迟。abort - 在中止阶段我们删除临时文件。我们知道如果发生任何故障Flink 会将应用程序的状态恢复到最新的一次 checkpoint 点。一种极端的情况是预提交成功了但在这次 commit 的通知到达 operator 之前发生了故障。在这种情况下Flink 会将 operator 的状态恢复到已经预提交但尚未真正提交的状态。我们需要在预提交阶段保存足够多的信息到 checkpoint 状态中以便在重启后能正确的中止或提交事务。在这个例子中这些信息是临时文件和目标目录的路径。TwoPhaseCommitSinkFunction 已经把这种情况考虑在内了并且在从 checkpoint 点恢复状态时会优先发出一个 commit 。我们需要以幂等方式实现提交一般来说这并不难。在这个示例中我们可以识别出这样的情况临时文件不在临时目录中但已经移动到目标目录了。在 TwoPhaseCommitSinkFunction 中还有一些其他边界情况也会考虑在内请参考 Flink 文档了解更多信息https://ci.apache.org/projects/flink/flink-docs-release-1.4/api/java/org/apache/flink/streaming/api/functions/sink/TwoPhaseCommitSinkFunction.html总结总结下本文涉及的一些要点Flink 的 checkpoint 机制是支持两阶段提交协议并提供端到端的 Exactly-Once 语义的基础。这个方案的优点是: Flink 不像其他一些系统那样通过网络传输存储数据 - 不需要像大多数批处理程序那样将计算的每个阶段写入磁盘。Flink 的 TwoPhaseCommitSinkFunction 提取了两阶段提交协议的通用逻辑基于此将 Flink 和支持事务的外部系统结合构建端到端的 Exactly-Once 成为可能。从 Flink 1.4.0 开始Pravega 和 Kafka 0.11 producer 都提供了 Exactly-Once 语义Kafka 在0.11版本首次引入了事务为在 Flink 程序中使用 Kafka producer 提供 Exactly-Once 语义提供了可能性。Kafaka 0.11 producer 的事务是在 TwoPhaseCommitSinkFunction 基础上实现的和 at-least-once producer 相比只增加了非常低的开销。这是个令人兴奋的功能期待 Flink TwoPhaseCommitSinkFunction 在未来支持更多的数据接收端。viahttps://www.ververica.com/blog/end-to-end-exactly-once-processing-apache-flink-apache-kafka作者Piotr Nowojski翻译周凯波大家工作学习遇到HBase技术问题把问题发布到HBase技术社区论坛http://hbase.group欢迎大家论坛上面提问留言讨论。想了解更多HBase技术关注HBase技术社区公众号(微信号:hbasegroup)非常欢迎大家积极投稿。本群为HBaseSpark技术交流讨论整合最优质的专家资源和技术资料会定期开展线下技术沙龙专家技术直播专家答疑活动点击链接钉钉入群https://dwz.cn/Fvqv066s或扫码进群本群为Cassandra技术交流讨论整合最优质的专家资源和技术资料会定期开展线下技术沙龙专家技术直播专家答疑活动Cassandra 社区钉钉大群https://c.tb.cn/F3.ZRTY0oCassandra 技术社区微信公众号
http://www.zqtcl.cn/news/753842/

相关文章:

  • 做医疗护具网站浙江立鹏建设有限公司网站
  • 织梦制作手机网站c 网站开发需要学什么软件
  • 罗湖网站制作阿里巴巴开店网站怎么做
  • 深圳住房和建设局网站 招标怎样建设自己的视频网站
  • 网站建设的目的模板茶网站建设需要多少钱
  • 珠海市城乡住房建设局网站网站外链
  • 福田做网站需要多少钱做淘宝客网站性质
  • html网站怎么进入后台网站主题怎么写
  • wordpress怎么ftp建站高端网站建设域名注册
  • 我用织梦5.7做个网站应该把淘宝客店铺链接放到哪聊天软件开发需要多少钱
  • 站长工具爱站竞价单页网站制作
  • 网站分类目录大全购物网站大全棉鞋
  • 网站镜像做排名建立外贸英文网站应该怎么做
  • 上海做网站就用乐云seo手机网站cms 下载
  • 做网站需要固定ip么灵犀科技网站建设
  • 深圳高端做网站建设网站备案与不备案区别
  • 家居企业网站建设公司苏州高新区建设局网站管网
  • 体育门户网站模板seo网络推广有哪些
  • 石家庄网站建设教程百度云下载
  • 怎样查看网站建设时间公司网站关键词优化
  • 网站淘宝推广怎么做网站seo基本流程
  • miit网站备案济南哪里做网站
  • 做网站软件的公司前端优化
  • 哪个网站有做形象墙汉沽网站建设制作
  • 网站alexa排名查询免费发帖的平台有哪些
  • 德国网站后缀濮阳房产网站建设
  • 漕泾网站建设做网站php语言用什么工具
  • 专业营销的网站建设公司哪家好专门做二手书的网站
  • 建新网站开发流程图电子商务网站开发综合实训报告
  • 临汾网站建设销售长沙网站建设1681989