4.1.24 Flink-流处理框架-Flink中的容错机制之状态一致性级别和端到端的状态一致性

目录

1.什么是状态一致性

2.一致性级别

3.端到端(end-to-end)状态一致性


1.什么是状态一致性

        当在分布式系统中引入状态时,自然也引入了一致性问题。一致性实际上是" 正确性级别"的另一种说法,也就是说在成功处理故障并恢复之后得到的结果,与没 有发生任何故障时得到的结果相比,前者到底有多正确?举例来说,假设要对最近 一小时登录的用户计数。在系统经历故障之后,计数结果是多少?如果有偏差,是有漏掉的计数还是重复计数?

2.一致性级别

        在流处理中,一致性可以分为 3 个级别:

     (1)at-most-once: 这其实是没有正确性保障的委婉说法——故障发生之后,计数结果可能丢失。同样的还有 udp。

     (2)at-least-once: 这表示计数结果可能大于正确值,但绝不会小于正确值。也就是说,计数程序在发生故障后可能多算,但是绝不会少算

     (3)exactly-once: 这指的是系统保证在发生故障后得到的计数结果与正确值一致

        曾经,at-least-once 非常流行。第一代流处理器(如 Storm 和 Samza)刚问世时只保证 at-least-once,原因有二:(1)保证 exactly-once 的系统实现起来更复杂。这在基础架构层(决定什么代表 正确,以及 exactly-once 的范围是什么)和实现层都很有挑战性。(2)流处理系统的早期用户愿意接受框架的局限性,并在应用层想办法弥补(例 如使应用程序具有幂等性,或者用批量计算层再做一遍计算)。

        最先保证 exactly-once 的系统(Storm Trident 和 Spark Streaming)在性能和表现力 这两个方面付出了很大的代价。为了保证 exactly-once,这些系统无法单独地对每条记录运用应用逻辑,而是同时处理多条(一批)记录,保证对每一批的处理要么全部 成功,要么全部失败。这就导致在得到结果前,必须等待一批记录处理结束。因此, 用户经常不得不使用两个流处理框架(一个用来保证 exactly-once,另一个用来对每 个元素做低延迟处理),结果使基础设施更加复杂。曾经,用户不得不在保证 exactly-once 与获得低延迟和效率之间权衡利弊。Flink 避免了这种权衡。

        Flink 的一个重大价值在于,它既保证了 exactly-once,也具有低延迟和高吞吐 的处理能力。从根本上说,Flink 通过使自身满足所有需求来避免权衡,它是业界的一次意义 重大的技术飞跃。尽管这在外行看来很神奇,但是一旦了解,就会恍然大悟。

3.端到端(end-to-end)状态一致性

        目前我们看到的一致性保证都是由流处理器实现的,也就是说都是在 Flink 流 处理器内部保证的;而在真实应用中,流处理应用除了流处理器以外还包含了数据 源(例如 Kafka)和输出到持久化系统。

        端到端的一致性保证,意味着结果的正确性贯穿了整个流处理应用的始终;每 一个组件都保证了它自己的一致性,整个端到端的一致性级别取决于所有组件中一 致性最弱的组件。具体可以划分如下:

  • 内部保证 —— 依赖 checkpoint
  • source 端 —— 需要外部源可重设数据的读取位置
  • sink 端 —— 需要保证从故障恢复时,数据不会重复写入外部系统

        而对于 sink 端,又有两种具体的实现方式:幂等(Idempotent)写入和事务性 (Transactional)写入。

  • 幂等写入 所谓幂等操作,是说一个操作,可以重复执行很多次,但只导致一次结果更改, 也就是说,后面再重复执行就不起作用了。
  • 事务写入 需要构建事务来写入外部系统,构建的事务对应着 checkpoint,等到 checkpoint 真正完成的时候,才把所有对应的结果写入 sink 系统中。

        对于事务性写入,具体又有两种实现方式:预写日志(WAL)两阶段提交 (2PC)。DataStream API 提供了 GenericWriteAheadSink 模板类和 TwoPhaseCommitSinkFunction 接口,可以方便地实现这两种方式的事务性写入。

        不同 Source 和 Sink 的一致性保证可以用下表说明:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
如今的大数据技术应用场景,对实时性的要求已经越来越高。作为新一代大数据处理框架,由于非常好的实时性,Flink独树一帜,在近些年引起了业内极大的兴趣和关注。Flink能够提供毫秒级别的延迟,同时保证了数据处理的低延迟、高吞吐和结果的正确性,还提供了丰富的时间类型和窗口计算、Exactly-once 语义支持,另外还可以进行状态管理,并提供了CEP(复杂事件处理)的支持。Flink在实时分析领域的优势,使得越来越多的公司开始将实时项目向Flink迁移,其社区也在快速发展壮大。目前,Flink已经成为各大公司实时领域的发力重点,特别是国内以阿里为代表的一众大厂,都在全力投入,不少公司为Flink社区贡献了大量源码。如今Flink已被很多人认为是大数据实时处理的方向和未来,很多公司也都在招聘和储备了解掌握Flink的人才。本教程将Flink理论与电商数据分析项目实战并重,对Flink基础理论知识做了系统的梳理和阐述,并通过电商用户行为分析的具体项目用多个指标进行了实战演练。为有志于增加大数据项目经验、扩展处理框架知识的工程师提供了学习方式。二、教程内容和目标本教程主要分为两部分:第一部分,主要是Flink基础理论的讲解,涉及到各种重要概念、原理和API的用法,并且会有大量的示例代码实现;第二部分,以电商作为业务应用场景,以Flink作为分析框架,介绍一个电商用户行为分析项目的开发实战。通过理论和实际的紧密结合,可以使学员对Flink有充分的认识和理解,在项目实战对Flink和处理应用的场景、以及电商分析业务领域有更深刻的认识;并且通过对处理原理的学习和与批处理架构的对比,可以对大数据处理架构有更全面的了解,为日后成长为架构师打下基础。三、谁适合学1、有一定的 Java、Scala 基础,希望了解新的大数据方向的编程人员2、有 Java、Scala 开发经验,了解大数据相关知识,希望增加项目经验的开发人员3、有较好的大数据基础,希望掌握Flink及处理框架的求职人员

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值