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

百度收录最高发帖网站南通市规划建设局网站

百度收录最高发帖网站,南通市规划建设局网站,游戏工作室加盟需要什么条件,上海城隍庙小吃推荐Flink 从入门到实践#xff08;一#xff09;#xff1a;初步介绍 Apache Flink 是一个框架和分布式处理引擎#xff0c;用于在 无边界 和 有边界 数据流上进行 有状态 的计算。Flink 能在所有常见集群环境中运行#xff0c;并能以内存速度和任意规模进行计算。 1.架构 1… Flink 从入门到实践一初步介绍 Apache Flink 是一个框架和分布式处理引擎用于在 无边界 和 有边界 数据流上进行 有状态 的计算。Flink 能在所有常见集群环境中运行并能以内存速度和任意规模进行计算。 1.架构 1.1 处理无界和有界数据 任何类型的数据都可以形成一种事件流。信用卡交易、传感器测量、机器日志、网站或移动应用程序上的用户交互记录所有这些数据都形成一种流。 数据可以被作为 无界 或者 有界 流来处理。 无界流有定义流的开始但没有定义流的结束。它们会无休止地产生数据。无界流的数据必须持续处理即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理因为输入是无限的在任何时候输入都不会完成。处理无界数据通常要求以特定顺序摄取事件例如事件发生的顺序以便能够推断结果的完整性。有界流有定义流的开始也有定义流的结束。有界流可以在摄取所有数据后再进行计算。有界流所有数据可以被排序所以并不需要有序摄取。有界流处理通常被称为批处理 Apache Flink 擅长处理无界和有界数据集。精确的时间控制和状态化使得 Flink 的运行时runtime能够运行任何处理无界流的应用。有界流则由一些专为固定大小数据集特殊设计的算法和数据结构进行内部处理产生了出色的性能。 1.2 部署应用到任意地方 Apache Flink 是一个分布式系统它需要计算资源来执行应用程序。Flink 集成了所有常见的集群资源管理器例如 Hadoop YARN、 Apache Mesos 和 Kubernetes但同时也可以作为独立集群运行。 Flink 被设计为能够很好地工作在上述每个资源管理器中这是通过资源管理器特定resource-manager-specific的部署模式实现的。Flink 可以采用与当前资源管理器相适应的方式进行交互。 部署 Flink 应用程序时Flink 会根据应用程序配置的并行性自动标识所需的资源并从资源管理器请求这些资源。在发生故障的情况下Flink 通过请求新资源来替换发生故障的容器。提交或控制应用程序的所有通信都是通过 REST 调用进行的这可以简化 Flink 与各种环境中的集成。 1.3 运行任意规模应用 Flink 旨在任意规模上运行有状态流式应用。因此应用程序被并行化为可能数千个任务这些任务分布在集群中并发执行。所以应用程序能够充分利用无尽的 CPU、内存、磁盘和网络 IO。而且 Flink 很容易维护非常大的应用程序状态。其异步和增量的检查点算法对处理延迟产生最小的影响同时保证精确一次状态的一致性。 Flink 用户报告了其生产环境中一些令人印象深刻的扩展性数字 处理每天数万亿的事件应用维护几TB大小的状态应用在数千个内核上运行 1.4 利用内存性能 有状态的 Flink 程序针对本地状态访问进行了优化。任务的状态始终保留在内存中如果状态大小超过可用内存则会保存在能高效访问的磁盘数据结构中。任务通过访问本地通常在内存中状态来进行所有的计算从而产生非常低的处理延迟。Flink 通过定期和异步地对本地状态进行持久化存储来保证故障场景下精确一次的状态一致性。 2.应用 Apache Flink 是一个针对无界和有界数据流进行有状态计算的框架。Flink 自底向上在不同的抽象级别提供了多种 API并且针对常见的使用场景开发了专用的扩展库。 2.1 流处理应用的基本组件 2.1.1 流 显而易见数据流是流处理的基本要素。然而流也拥有着多种特征。这些特征决定了流如何以及何时被处理。Flink 是一个能够处理任何类型数据流的强大处理框架。 有界 和 无界 的数据流流可以是无界的也可以是有界的例如固定大小的数据集。Flink 在无界的数据流处理上拥有诸多功能强大的特性同时也针对有界的数据流开发了专用的高效算子。实时 和 历史记录 的数据流所有的数据都是以流的方式产生但用户通常会使用两种截然不同的方法处理数据。或是在数据生成时进行实时的处理亦或是先将数据流持久化到存储系统中——例如文件系统或对象存储然后再进行批处理。Flink 的应用能够同时支持处理实时以及历史记录数据流。 2.1.2 状态 只有在每一个单独的事件上进行转换操作的应用才不需要状态换言之每一个具有一定复杂度的流处理应用都是有状态的。任何运行基本业务逻辑的流处理应用都需要在一定时间内存储所接收的事件或中间结果以供后续的某个时间点例如收到下一个事件或者经过一段特定时间进行访问并进行后续处理。 应用状态是 Flink 中的一等公民Flink 提供了许多状态管理相关的特性支持其中包括 多种状态基础类型Flink 为多种不同的数据结构提供了相对应的状态基础类型例如原子值value列表list以及映射map。开发者可以基于处理函数对状态的访问方式选择最高效、最适合的状态基础类型。插件化的 State BackendState Backend 负责管理应用程序状态并在需要的时候进行 checkpoint。Flink 支持多种 state backend可以将状态存在内存或者 RocksDB。RocksDB 是一种高效的嵌入式、持久化键值存储引擎。Flink 也支持插件式的自定义 state backend 进行状态存储。精确一次语义Flink 的 checkpoint 和故障恢复算法保证了故障发生后应用状态的一致性。因此Flink 能够在应用程序发生故障时对应用程序透明不造成正确性的影响。超大数据量状态Flink 能够利用其异步以及增量式的 checkpoint 算法存储数 TB 级别的应用状态。可弹性伸缩的应用Flink 能够通过在更多或更少的工作节点上对状态进行重新分布支持有状态应用的分布式的横向伸缩。 2.1.3 时间 时间是流处理应用另一个重要的组成部分。因为事件总是在特定时间点发生所以大多数的事件流都拥有事件本身所固有的时间语义。进一步而言许多常见的流计算都基于时间语义例如窗口聚合、会话计算、模式检测和基于时间的 join。流处理的一个重要方面是应用程序如何衡量时间即区分事件时间event-time和处理时间processing-time。 Flink 提供了丰富的时间语义支持。 事件时间模式使用事件时间语义的流处理应用根据事件本身自带的时间戳进行结果的计算。因此无论处理的是历史记录的事件还是实时的事件事件时间模式的处理总能保证结果的准确性和一致性。Watermark 支持Flink 引入了 Watermark 的概念用以衡量事件时间进展。Watermark 也是一种平衡处理延时和完整性的灵活机制。迟到数据处理当以带有 Watermark 的事件时间模式处理数据流时在计算完成之后仍会有相关数据到达。这样的事件被称为迟到事件。Flink 提供了多种处理迟到数据的选项例如将这些数据重定向到旁路输出side output或者更新之前完成计算的结果。处理时间模式除了事件时间模式Flink 还支持处理时间语义。处理时间模式根据处理引擎的机器时钟触发计算一般适用于有着严格的低延迟需求并且能够容忍近似结果的流处理应用。 2.2 分层 API Flink 根据抽象程度分层提供了三种不同的 API。每一种 API 在简洁性和表达力上有着不同的侧重并且针对不同的应用场景。 2.2.1 ProcessFunction ProcessFunction 是 Flink 所提供的最具表达力的接口。ProcessFunction 可以处理一或两条输入数据流中的单个事件或者归入一个特定窗口内的多个事件。它提供了对于时间和状态的细粒度控制。开发者可以在其中任意地修改状态也能够注册定时器用以在未来的某一时刻触发回调函数。因此你可以利用 ProcessFunction 实现许多有状态的事件驱动应用所需要的基于单个事件的复杂业务逻辑。 下面的代码示例展示了如何在 KeyedStream 上利用 KeyedProcessFunction 对标记为 START 和 END 的事件进行处理。当收到 START 事件时处理函数会记录其时间戳并且注册一个时长 4 4 4 小时的计时器。如果在计时器结束之前收到 END 事件处理函数会计算其与上一个 START 事件的时间间隔清空状态并将计算结果返回。否则计时器结束并清空状态。 /** * Matches keyed START and END events and computes the difference between * both elements timestamps. The first String field is the key attribute, * the second String attribute marks START and END events. */ public static class StartEndDurationextends KeyedProcessFunctionString, Tuple2String, String, Tuple2String, Long {private ValueStateLong startTime;Overridepublic void open(Configuration conf) {// obtain state handlestartTime getRuntimeContext().getState(new ValueStateDescriptorLong(startTime, Long.class));}/** Called for each processed event. */Overridepublic void processElement(Tuple2String, String in,Context ctx,CollectorTuple2String, Long out) throws Exception {switch (in.f1) {case START:// set the start time if we receive a start event.startTime.update(ctx.timestamp());// register a timer in four hours from the start event.ctx.timerService().registerEventTimeTimer(ctx.timestamp() 4 * 60 * 60 * 1000);break;case END:// emit the duration between start and end eventLong sTime startTime.value();if (sTime ! null) {out.collect(Tuple2.of(in.f0, ctx.timestamp() - sTime));// clear the statestartTime.clear();}default:// do nothing}}/** Called when a timer fires. */Overridepublic void onTimer(long timestamp,OnTimerContext ctx,CollectorTuple2String, Long out) {// Timeout interval exceeded. Cleaning up the state.startTime.clear();} }2.2.2 DataStream API DataStream API 为许多通用的流处理操作提供了处理原语。这些操作包括窗口、逐条记录的转换操作在处理事件时进行外部数据库查询等。DataStream API 支持 Java 和 Scala 语言预先定义了例如 map()、reduce()、aggregate() 等函数。你可以通过扩展实现预定义接口或使用 Java、Scala 的 lambda 表达式实现自定义的函数。 下面的代码示例展示了如何捕获会话时间范围内所有的点击流事件并对每一次会话的点击量进行计数。 // a stream of website clicks DataStreamClick clicks ...DataStreamTuple2String, Long result clicks// project clicks to userId and add a 1 for counting.map(// define function by implementing the MapFunction interface.new MapFunctionClick, Tuple2String, Long() {Overridepublic Tuple2String, Long map(Click click) {return Tuple2.of(click.userId, 1L);}})// key by userId (field 0).keyBy(0)// define session window with 30 minute gap.window(EventTimeSessionWindows.withGap(Time.minutes(30L)))// count clicks per session. Define function as lambda function..reduce((a, b) - Tuple2.of(a.f0, a.f1 b.f1));2.2.3 SQL Table API Flink 支持两种关系型的 APITable API 和 SQL。这两个 API 都是批处理和流处理统一的 API这意味着在无边界的实时数据流和有边界的历史记录数据流上关系型 API 会以相同的语义执行查询并产生相同的结果。Table API 和 SQL 借助了 Apache Calcite 来进行查询的解析校验以及优化。它们可以与 DataStream 和 DataSet API 无缝集成并支持用户自定义的标量函数聚合函数以及表值函数。 Flink 的关系型 API 旨在简化数据分析、数据流水线和 ETL 应用的定义。 下面的代码示例展示了如何使用 SQL 语句查询捕获会话时间范围内所有的点击流事件并对每一次会话的点击量进行计数。此示例与上述 DataStream API 中的示例有着相同的逻辑。 SELECT userId, COUNT(*) FROM clicks GROUP BY SESSION(clicktime, INTERVAL 30 MINUTE), userId2.3 库 Flink 具有数个适用于常见数据处理应用场景的扩展库。这些库通常嵌入在 API 中且并不完全独立于其它 API。它们也因此可以受益于 API 的所有特性并与其他库集成。 复杂事件处理CEP模式检测是事件流处理中的一个非常常见的用例。Flink 的 CEP 库提供了 API使用户能够以例如正则表达式或状态机的方式指定事件模式。CEP 库与 Flink 的 DataStream API 集成以便在 DataStream 上评估模式。CEP 库的应用包括 网络入侵检测业务流程监控 和 欺诈检测。DataSet APIDataSet API 是 Flink 用于批处理应用程序的核心 API。DataSet API 所提供的基础算子包括 map、reduce、(outer) join、co-group、iterate 等。所有算子都有相应的算法和数据结构支持对内存中的序列化数据进行操作。如果数据大小超过预留内存则过量数据将存储到磁盘。Flink 的 DataSet API 的数据处理算法借鉴了传统数据库算法的实现例如混合散列连接hybrid hash-join和外部归并排序external merge-sort。GellyGelly 是一个可扩展的图形处理和分析库。Gelly 是在 DataSet API 之上实现的并与 DataSet API 集成。因此它能够受益于其可扩展且健壮的操作符。Gelly 提供了内置算法 如 label propagation、triangle enumeration 和 page rank 算法也提供了一个简化自定义图算法实现的 Graph API 。 3.运维 Apache Flink 是一个针对无界和有界数据流进行有状态计算的框架。由于许多流应用程序旨在以最短的停机时间连续运行因此流处理器必须提供出色的故障恢复能力以及在应用程序运行期间进行监控和维护的工具。 Apache Flink 非常注重流数据处理的可运维性。接下来我们将详细介绍 Flink 的故障恢复机制并介绍其管理和监控应用的功能。 3.1 7 × 24小时稳定运行 在分布式系统中服务故障是常有的事为了保证服务能够 7 ∗ 24 7*24 7∗24 小时稳定运行像 Flink 这样的流处理器故障恢复机制是必须要有的。显然这就意味着它这类流处理器不仅要能在服务出现故障时候能够重启服务而且还要当故障发生时保证能够持久化服务内部各个组件的当前状态只有这样才能保证在故障恢复时候服务能够继续正常运行好像故障就没有发生过一样。 Flink 通过几下多种机制维护应用可持续运行及其一致性: 检查点的一致性Flink 的故障恢复机制是通过建立分布式应用服务状态一致性检查点实现的当有故障产生时应用服务会重启后再重新加载上一次成功备份的状态检查点信息。结合可重放的数据源该特性可保证 精确一次exactly-once 的状态一致性。高效的检查点如果一个应用要维护一个 TB 级的状态信息对此应用的状态建立检查点服务的资源开销是很高的为了减小因检查点服务对应用的延迟性SLAs 服务等级协议的影响Flink 采用异步及增量的方式构建检查点服务。端到端的精确一次Flink 为某些特定的存储支持了事务型输出的功能及时在发生故障的情况下也能够保证精确一次的输出。集成多种集群管理服务Flink 已与多种集群管理服务紧密集成如 Hadoop YARNMesos以及 Kubernetes。当集群中某个流程任务失败后一个新的流程服务会自动启动并替代它继续执行。内置高可用服务Flink 内置了为解决单点故障问题的高可用性服务模块此模块是基于 Apache ZooKeeper 技术实现的Apache ZooKeeper 是一种可靠的、交互式的、分布式协调服务组件。 3.2 Flink 能够更方便地升级、迁移、暂停、恢复应用服务 驱动关键业务服务的流应用是经常需要维护的。比如需要修复系统漏洞改进功能或开发新功能。然而升级一个有状态的流应用并不是简单的事情因为在我们为了升级一个改进后版本而简单停止当前流应用并重启时我们还不能丢失掉当前流应用的所处于的状态信息。 而 Flink 的 Savepoint 服务就是为解决升级服务过程中记录流应用状态信息及其相关难题而产生的一种唯一的、强大的组件。一个 Savepoint就是一个应用服务状态的一致性快照因此其与 checkpoint 组件的很相似但是与 checkpoint 相比Savepoint 需要手动触发启动而且当流应用服务停止时它并不会自动删除。Savepoint 常被应用于启动一个已含有状态的流服务并初始化其备份时状态。Savepoint 有以下特点 便于升级应用服务版本Savepoint 常在应用版本升级时使用当前应用的新版本更新升级时可以根据上一个版本程序记录的 Savepoint 内的服务状态信息来重启服务。它也可能会使用更早的 Savepoint 还原点来重启服务以便于修复由于有缺陷的程序版本导致的不正确的程序运行结果。方便集群服务移植通过使用 Savepoint流服务应用可以自由的在不同集群中迁移部署。方便 Flink 版本升级通过使用 Savepoint可以使应用服务在升级 Flink 时更加安全便捷。增加应用并行服务的扩展性Savepoint 也常在增加或减少应用服务集群的并行度时使用。便于 A/B 测试及假设分析场景对比结果通过把同一应用在使用不同版本的应用程序基于同一个 Savepoint 还原点启动服务时可以测试对比 2 2 2 个或多个版本程序的性能及服务质量。暂停和恢复服务一个应用服务可以在新建一个 Savepoint 后再停止服务以便于后面任何时间点再根据这个实时刷新的 Savepoint 还原点进行恢复服务。归档服务Savepoint 还提供还原点的归档服务以便于用户能够指定时间点的 Savepoint 的服务数据进行重置应用服务的状态进行恢复服务。 3.3 监控和控制应用服务 如其它应用服务一样持续运行的流应用服务也需要监控及集成到一些基础设施资源管理服务中例如一个组件的监控服务及日志服务等。监控服务有助于预测问题并提前做出反应日志服务提供日志记录能够帮助追踪、调查、分析故障发生的根本原因。最后便捷易用的访问控制应用服务运行的接口也是 Flink 的一个重要的亮点特征。 Flink 与许多常见的日志记录和监视服务集成得很好并提供了一个 REST API 来控制应用服务和查询应用信息。具体表现如下 Web UI 方式Flink 提供了一个 Web UI 来观察、监视和调试正在运行的应用服务。并且还可以执行或取消组件或任务的执行。日志集成服务Flink 实现了流行的 slf4j 日志接口并与日志框架 log4j 或 logback 集成。指标服务Flink 提供了一个复杂的度量系统来收集和报告系统和用户定义的度量指标信息。度量信息可以导出到多个报表组件服务包括 JMXGangliaGraphitePrometheusStatsDDatadog 和 Slf4j。标准的 WEB REST API 接口服务Flink 提供多种 REST API 接口有提交新应用程序、获取正在运行的应用程序的 Savepoint 服务信息、取消应用服务等接口。REST API 还提供元数据信息和已采集的运行中或完成后的应用服务的指标信息。
http://www.w-s-a.com/news/568389/

相关文章:

  • 网站开发 外包空心找回微信
  • 长沙市网站推广多少钱网站开发流程图和介绍
  • 网站后缀net施工企业自建自用的工程可以不进行招标是否正确
  • 鄂尔多斯市住房和城乡建设厅网站帮别人做网站赚钱6
  • 宜选科技就是帮人做网站动漫制作专业主修课程
  • 怎么做网站免费的教程温州捷创网站建设
  • 做免费推广的网站有哪些深圳华强北最新消息
  • 电子商务网站建设规划开题报告桂林漓江景区游玩攻略
  • 程序员参与洗钱网站建设做视频网站需要多少钱
  • 网站建设背景是什么企业邮箱怎么写
  • 山东省建设资格中心网站iis wordpress安装教程
  • 做的网站 显示乱码怎么做微信小程序平台
  • 怎样建设打字网站怎样增加网站浏览量
  • 网站建设方案的征求意见网站主机免备案
  • 共享农业网站建设郑州市建网站
  • 成都网站建设四川冠辰网站建设带会员系统的网站模板
  • 水果网站建设方案书wordpress get_the_category
  • 第一ppt网站官网买域名价格
  • 网站 报价单自己做的网站如何上传
  • 天津网站建立辽宁建设工程信息网2017年定额人工费系数
  • 柳州网站优化搜索引擎优化方法案例
  • 什么网站比较少人做响应式网站开发周期
  • 公司网站欢迎语工作期间员工花钱做的网站
  • 新网站该如何做网站优化呢网络营销网站设计
  • 旅游门户网站模板下载做策划网站推广怎么写简历
  • 建设隔离变压器移动网站wordpress动态导航
  • 平潭建设局网站中国免费素材网
  • 虚拟主机可以做视频视频网站吗做爰全过程免费的视频网站有声音
  • 专业做家电经销的网站网络管理系统有哪几部分组成
  • 自学网站编程网站名称需要注册吗