Flink的一致性保证

Flink流处理API之Sink Flink流处理API 代码主要分为四个模块:environment, source,transform,sink Sink flink中对外的输出都要利用sink的完成 Kafka object KafkaSinkTest { def main(args: Array[String]): Unit = { val env = StreamExecutionEnvironment.getExecutionEnvironment env.setParallelism(1) 阅读详情

​前言介绍

Flink的检查点和恢复机制定期的会保存应用程序状态的一致性检查点。在故障的情况下,应用程序的状态将会从最近一次完成的检查点恢复,并继续处理。尽管如此,可以使用检查点来重置应用程序的状态无法完全达到令人满意的一致性保证。相反,source和sink的连接器需要和Flink的检查点和恢复机制进行集成才能提供有意义的一致性保证。

为了给应用程序提供恰好处理一次语义的状态一致性保证,应用程序的source连接器需要能够将source的读位置重置到之前保存的检查点位置。当处理一次检查点时,source操作符将会把source的读位置持久化,并在恢复的时候从这些读位置开始重新读取。支持读位置的检查点的source连接器一般来说是基于文件的存储系统,如:文件流或者Kafka source(检查点会持久化某个正在消费的topic的读偏移量)。如果一个应用程序从一个无法存储和重置读位置的source连接器摄入数据,那么当任务出现故障的时候,数据就会丢失。也就是说我们只能提供at-most-once)的一致性保证。

Fink的检查点和恢复机制和可以重置读位置的source连接器结合使用,可以保证应用程序不会丢失任何数据。尽管如此,应用程序可能会发出两次计算结果,因为从上一次检查点恢复的应用程序所计算的结果将会被重新发送一次(一些结果已经发送出去了,这时任务故障,然后从上一次检查点恢复,这些结果将被重新计算一次然后发送出去)。所以,可重置读位置的source和Flink的恢复机制不足以提供端到端的恰好处理一次语义,即使应用程序的状态是恰好处理一次一致性级别。

Flink 中的一个大的特性就是exactly-once的特性,我们在一般的流处理程序中,会有三种处理语义

  • AT-MOST-ONCE(最多一次)当故障发生的时候,什么都不干。就是说每条消息就只消费一次。

  • AT-LEAST-ONCE(至少一次)为了确保数据不丢失,确保每个时间都得到处理,一些时间可能会被处理多次。

  • EXACTLY-ONCE(精确一次)每个时间都精确处理一次

端到端的保证:

  • 内部保证--- checkpoint

  • source端---可重设数据的读取位置

  • sink端---从故障恢复时,数据不会重复写入外部系统

Flink(checkpoint)和source端(Kafka)可以保证不出问题。但一个志在提供端到端恰好处理一次语义一致性的应用程序需要特殊的sink连接器。sink连接器可以在不同的情况下使用两种技术来达到恰好处理一次一致性语义:幂等性写入和事务性写入。

幂等与事务

1. 幂等性写入

一个幂等操作无论执行多少次都会返回同样的结果。例如,重复的向hashmap中插入同样的key-value对就是幂等操作,因为头一次插入操作之后所有的插入操作都不会改变这个hashmap,因为hashmap已经包含这个key-value对了。另一方面,append操作就不是幂等操作了,因为多次append同一个元素将会导致列表每次都会添加一个元素。在流处理程序中,幂等写入操作是很有意思的,因为幂等写入操作可以执行多次但不改变结果。所以它们可以在某种程度上缓和Flink检查点机制带来的重播计算结果的效应。

需要注意的是,依赖于幂等性sink来达到exactly-once语义的应用程序,必须保证在从检查点恢复以后,它将会覆盖之前已经写入的结果。例如,一个包含有sink操作的应用在sink到一个key-value存储时必须保证它能够确定的计算出将要更新的key值。同时,从Flink程序sink到的key-value存储中读取数据的应用,在Flink从检查点恢复的过程中,可能会看到不想看到的结果。当重播开始时,之前已经发出的计算结果可能会被更早的结果所覆盖(因为在恢复过程中)。所以,一个消费Flink程序输出数据的应用,可能会观察到时间回退,例如读到了比之前小的计数。也就是说,当流处理程序处于恢复过程中时,流处理程序的结果将处于不稳定的状态,因为一些结果被覆盖掉,而另一些结果还没有被覆盖。一旦重播完成,也就是说应用程序已经通过了之前出故障的点,结果将会继续保持一致性。

2. 事务性写入

实现端到端的恰好处理一次一致性语义的方法基于事务性写入。其思想是只将最近一次成功保存的检查点之前的计算结果写入到外部系统中去。这样就保证了在任务故障的情况下,端到端恰好处理一次语义。应用将被重置到最近一次的检查点,而在这个检查点之后并没有向外部系统发出任何计算结果。通过只有当检查点保存完成以后再写入数据这种方法,事务性的方法将不会遭受幂等性写入所遭受的重播不一致的问题。尽管如此,事务性写入却带来了延迟,因为只有在检查点完成以后,我们才能看到计算结果。

Flink提供了两种构建模块来实现事务性sink连接器:write-ahead-log(WAL,预写式日志)sink和两阶段提交sink。WAL式sink将会把所有计算结果写入到应用程序的状态中,等接到检查点完成的通知,才会将计算结果发送到sink系统。因为sink操作会把数据都缓存在状态后段,所以WAL可以使用在任何外部sink系统上。尽管如此,WAL还是无法提供刀枪不入的恰好处理一次语义的保证,再加上由于要缓存数据带来的状态后段的状态大小的问题,WAL模型并不十分完美。

与之形成对比的,2PC sink需要sink系统提供事务的支持或者可以模拟出事务特性的模块。对于每一个检查点,sink开始一个事务,然后将所有的接收到的数据都添加到事务中,并将这些数据写入到sink系统,但并没有提交(commit)它们。当事务接收到检查点完成的通知时,事务将被commit,数据将被真正的写入sink系统。这项机制主要依赖于一次sink可以在检查点完成之前开始事务,并在应用程序从一次故障中恢复以后再commit的能力。

2PC协议依赖于Flink的检查点机制。检查点屏障是开始一个新的事务的通知,所有操作符自己的检查点成功的通知是它们可以commit的投票,而作业管理器通知一个检查点成功的消息是commit事务的指令。于WAL sink形成对比的是,2PC sinks依赖于sink系统和sink本身的实现可以实现恰好处理一次语义。更多的,2PC sink不断的将数据写入到sink系统中,而WAL写模型就会有之前所述的问题。

事务写的方式能提供端到端的Exactly-Once一致性,它的代价也是非常明显的,就是牺牲了延迟。输出数据不再是实时写入到外部系统,而是分批次地提交。目前来说,没有完美的故障恢复和Exactly-Once保障机制,对于开发者来说,需要在不同需求之间权衡

开发理解

3. 开发过程的理解

3.1 Flink如何管理Kafka consumer offsets

checkpoint是Flink的内部机制,可以从故障中恢复。通俗的理解是checkpoint是Flink应用程序状态的一致性副本,包括输入的读取位置(offset)。如果发生故障,Flink将通过从checkpoint加载状态后端并从恢复的读取位置继续恢复应用程序,可以做到所谓的断点续传。

checkpoint使Flink具有容错能力,并确保在发生故障时具有容错的能力。应用程序可以定期触发检查点。

Flink中的Kafka消费者将Flink的检查点机制与有状态运算符集成在一起,其状态是所有Kafka分区中的读取偏移量。触发checkpoint时,每个分区的偏移量都存储在checkpoint中。Flink的checkpoint机制确保所有操作员任务的存储状态是一致的,即它们基于相同的输入数据。当所有操作员任务成功存储其状态时,检查点完成。因此,当从潜在的系统故障重新启动时,系统提供一次性状态更新保证。

3.2 两阶段提交

在分布式系统中,为了让每个节点都能够感知到其他节点的事务执行状况,需要引入一个中心节点来统一处理所有节点的执行逻辑,这个中心节点叫做协调者(coordinator),被中心节点调度的其他业务节点叫做参与者(participant)。

接下来正式介绍2PC。顾名思义,2PC将分布式事务分成了两个阶段,两个阶段分别为提交请求和提交。协调者根据参与者的响应来决定是否需要真正地执行事务

提交请求阶段

  • 协调者向所有参与者发送prepare请求与事务内容,询问是否可以准备事务提交,并等待参与者的响应。

  • 参与者执行事务中包含的操作,并记录undo日志(用于回滚)和redo日志(用于重放),但不真正提交。

  • 参与者向协调者返回事务操作的执行结果,执行成功返回yes,否则返回no

提交执行阶段

分为成功与失败两种情况。

若所有参与者都返回yes,说明事务可以提交:

  • 协调者向所有参与者发送commit请求。

  • 参与者收到commit请求后,将事务真正地提交上去,并释放占用的事务资源,并向协调者返回ack。

  • 协调者收到所有参与者的ack消息,事务成功完成。

若有参与者返回no或者超时未返回,说明事务中断,需要回滚:

  • 协调者向所有参与者发送rollback请求

  • 参与者收到rollback请求后,根据undo日志回滚到事务执行前的状态,释放占用的事务资源,并向协调者返回ack

  • 协调者收到所有参与者的ack消息,事务回滚完成

3.3图解

通俗的理解过程:

  • 从kafka获取数据源:(1,2,3)这个时候数据1会经过source,热后进行到算子阶段,jobmanager触发checkpoint操作,这个时候offset会记录source消费的位置

  • 后续数据会继续跟进,1的数据进行算子操作(比如sum),这个时候数据继续往下走进行sink,jobmanager也会触发记录算子的状态

  • 数据1走进sink阶段,然后sink值写到一个临时文件中去,这个时候也会记录sink的状态,然后发送到kafka去(预提交),这个时候不会正真地去消费使用,因为不确定两边是否同步,这个时候会告诉flink这边已经有了,这个时候会正在的进行提交(第二阶段提交)

  • 这个时候整个checkpoint过程才算完整,如果某个过程失败,也即checkpoint过程不完整(jobmanager会丢弃),flink重启后会记录offset继续消费即可

按照术语来讲的话,这样理解:每当需要做checkpoint时,JobManager就在数据流中打入一个屏障(barrier),作为检查点的界限。屏障随着算子链向下游传递,每到达一个算子都会触发将状态快照写入状态后端(state BackEnd)的动作。当屏障到达Kafka sink后,触发preCommit(实际上是KafkaProducer.flush())方法刷写消息数据,但还未真正提交。接下来还是需要通过检查点来触发提交阶段。

最后总结

  • souce:使用执行ExactlyOnce的数据源,比如kafka等

  • 内部使用FlinkKafakConsumer,并开启CheckPoint,偏移量会保存到StateBackend中,并且默认会将偏移量写入到topic中去,即_consumer_offsets Flink设置CheckepointingModel.EXACTLY_ONCE

  • sink:

    存储系统支持覆盖也即幂等性:如Redis,Hbase,ES等

    存储系统不支持覆:需要支持事务(预写式日志或者两阶段提交),两阶段提交可参考Flink集成的kafka sink的实现

微信公众号:大数据左右手

人要去的地方,除了远方,还有未来
欢迎关注我,一起学习,一起进步!

 

Flink Table API/SQL 多分支sink 在某个场景中,需要从Kafka中获取数据,经过转换处理后,需要同时sink到多个输出源中(kafka、mysql、hologres)等。 阅读详情

相关推荐

Flink如何保证数据的一致性

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

qq_41758289的博客 1739

Flink多sink输出

Flink多sink Flink单一流多sink 通过OutputTag侧输出多个计算结果(同一结果对象需要进行copy再设置至侧输出流, 暂不支持同对象多次输出)进行sink Flink多阶段sink 通过OutputTag侧输出第一次计算结果进行sink 主流继续计算, 最后再sink package com.gin.demo; import lombok.*; import org.apache.flink.api.common.functions.MapFunction; import org.a

zxczb的博客 1万+

(exactly-once)Flink 如何实现端到端的一致性(kafka+flink+kafka)

flink 内部实现 exactly-once 原理!Checkpoint 原理!两次提交原理

lq13697179942的博客 2256

Flink输出算子Sink

滚动”的概念在日志文件的写入中经常遇到:因为文件会有内容持续不断地写入,所以我们应该给一个标准,到什么时候就开启新的文件,将之前的内容归档保存。StreamingFileSink 支持行编码(Row-encoded)和批量编码(Bulk-encoded,比如Parquet)格式。(basePath)和数据的编码逻辑(rowEncoder 或 bulkWriterFactory)。在创建行或批量编码Sink 时,我们需要传入两个参数,用来指定存储桶的基本路径。文件大小已达到1 GB。

Hardhen的博客 1689

Flink Checkpoint 机制:如何保证 barrier 和数据之间不乱序?

Flink Checkpoint 机制:如何保证 barrier 和数据之间不乱序? 1 前言 1.1 什么是 state? 要说 checkpoint,首先要从 state 聊起。之前有被问到对于 Flink state 的理解,state 的字面含义就是状态。所谓状态,它本身不难理解,简单的说,state 就是你在处理事件的时候需要保存的状态信息。 举个例子,如果你要计时,就要保存开始时间,然后用结束时间减去开始时间,这里的“开始时间”就是先前的状态。 Flink 官方对 state 也有解释: St

寒泉 3万+

【Flink实战系列】Flink 如何实现多个 sink 输出

在实际的生产环境中,我们的Flink任务可能需要同时写入多个存储,也就说会有多个sink,当然Flink是支持多个Sink,而且多个sink之间是并行的关系,互相也没有影响,具体的实现代码如下: package flink.table import java.sql.Timestamp import java.util.TimeZone import flink.util.CommonUti...

JasonLee实时计算 1万+

flink如何保证数据的一致性

flink如何保证数据的一致性 本文摘自书籍《Flink 基础教程》 收集转载与其他网络博文 一、一致性的三种级别 当在分布式系统中引入状态时,自然也引入了一致性问题。一致性实际上是“正确性级别”的另一种说法,即在成功处理故障并恢复之后得到的结果,与没有发生任何故障时得到的结果相比。在流处理中,一致性分为 3 个级别。 at-most-once:数据最多被处理一次。这其实是没有正确性保障的委婉说法——故障发生之后,计数结果可能丢失。 at-least-once:数据最少被处理一次。这表示计数结果可能大于正

m0_46168848的博客 2306

Flink中状态:保证大数据处理的一致性

在Flink中,状态是指应用程序在处理数据时需要跟踪和维护的信息。Flink内部使用了分布式快照技术,将状态存储在可靠的持久化存储介质中,以实现容错性和恢复能力。综上所述,Flink中的状态管理功能确保了大数据处理的一致性和容错性。通过一致性检查点和精确一次语义,Flink能够在分布式环境下可靠地管理和恢复应用程序的状态。Apache Flink作为一个开源流处理框架,提供了强大的状态管理功能,以保证大数据处理的一致性和容错性。Flink的精确一次语义是通过将状态的更新和输出操作原子化来实现的。

ByteHackerX的博客 116

Flink的端到端的一致性保证以及二阶段提交

Flink的端到端的一致性保证 状态一致性: 有状态的流处理,内部每个算子都可以有自己的状态 对于处理器内部而言,所谓的状态一致性,其实就是我们所说的计算的结果要保证准确 一条数据都不应该丢失,也不应该重复计算同一个数据 在遇到故障时可以恢复,恢复之后重新计算,计算的结果也应该正确不受影响 故障恢复时的三种一致性要求: AT-MOST-ONCE(最多一次) 当任务故障时,最简单的做法是什么都不干,...

sghuu的博客 2631

Flink中状态的一致性保证:保障大数据处理的可靠性

操作符状态的一致性保证是通过将状态数据复制到不同的任务实例上来实现的,以应对任务失败或重新分配的情况。通过检查点机制和一致性协议,Flink能够在分布式环境下保持数据的一致性,并能够在任务失败时自动恢复到之前的一致状态。键控状态的一致性保证是通过将相同键的所有事件分配到同一个任务上来实现的,因此同一个键的所有事件都会被顺序处理,从而保证了数据的一致性。Apache Flink作为一个高度可扩展的大数据处理框架,提供了强大的状态管理机制,以确保在分布式环境下处理的数据的一致性和可靠性。

PixelInk的博客 295

【Flink】介绍Flink中状态一致性的保证

1.概述 转载:介绍Flink中状态一致性的保证 再次温习了这篇文章有了不一样的收货。侵权可删,这里是方便自己找到。 1. 一致性1.1 介绍状态一致性 有状态的流处理,内部每个算子任务都可以有自己的状态 对于流处理器内部来说,所谓的状态一致性,其实就是我们所说的要保证计算结果准确,一条数据有也不丢失,也不会重复计算数据 在程序遇到故障时可以恢复任务状态,恢复以后的任务重新计算数据,计算完的结果也应该是完全正确的 1.2 性级别有哪些在流处理中,一致性可以分为 3 .

九师兄 1017

Flink如何保证端到端的一致性

1、流数据处理的容错语义 1、At most once --最多一次, 也就是说数据最多被处理一次,有可能会丢失 2、At least once --至少一次, 也就是说数据至少会被处理一次,有可能会重复 3、Exactly-Once --精准一次, 也就是说数据只会被处理一次,不会丢也不会重复,注意: 更准确的理解应该是只会被正确处理一次而不是仅一次 2、Flink如何支持End-to-End Exactly-Once 1、Source: offset+Checkpoint: 需要数据源支持off

qq_42160456的博客 649

OpenClaw与Ollama本地AI部署指南

AI模型本地化部署是当前企业数字化转型的关键技术,通过开源框架Ollama可以在消费级硬件上运行大语言模型。本文以OpenClaw多智能体系统为例,详解从环境配置到模型优化的全流程实践,特别针对国内开发者遇到的网络问题提供了镜像加速等解决方案。这种私有化部署方案尤其适合金融数据分析、企业知识管理等对数据安全要求高的场景,通过模块化设计实现多智能体协作,同时保持对NVIDIA显卡和普通CPU的兼容性。

weixin_34302561的博客 399

Flink的一致性保证与容错策略高级优化

1.背景介绍 一致性保证与容错策略是Apache Flink的核心特性之一,它能够确保Flink流处理作业在分布式环境中的一致性和容错性。在本文中,我们将深入探讨Flink的一致性保证与容错策略,并提供一些高级优化建议。 1. 背景介绍 Flink是一个流处理框架,用于处理大规模实时数据。它的核心特性包括一致性保证、容错策略和高性能。Flink通过一致性哈希算法、检查点机制和故障恢复策略来实...

AI天才研究院 1055

ESP-IDF下载配合MQTT协议接入云平台实例

通过ESP-IDF下载环境搭建,结合MQTT协议实现设备与云平台通信,详解从配置到连接的完整流程,助力物联网应用开发。重点涵盖espidf下载和MQTT集成关键步骤。

weixin_28913879的博客 454

Plant Simulation 实战指南:从二次分配问题到优化布局设计

本文是一份Plant Simulation实战指南,详细讲解了如何利用该仿真软件解决工厂布局中的二次分配问题。通过从数据准备、模型搭建到集成遗传算法进行自动化优化的完整流程,帮助工程师在数字孪生环境中高效寻找最优设备布局方案,从而显著降低物流成本,提升生产效率。

i1j2k的博客 565

flink 端到端的一致性 实现

一、综述 flink 通过内部依赖checkpoint 并且可以通过设置其参数exactly-once 实现其内部的一致性。但要实现其端到端的一致性,还必须保证 1、source 外部数据源可重设数据的读取位置 2、sink端 需要保证数据从故障恢复时,数据不会重复写入外部系统(或者可以逻辑实现写入多次,但只有一次生效的数据sink端 ) 幂等操作:一个操作,可以重复执行多次,但只导致一次结果更改,豁免重复操作执行就不起作用了(逻辑与、逻辑或等)具体理解参照自己以前写的文章。 事务写入:事务应该具有四个属性

weixin_40809627的博客 2004

相控阵雷达仿真入门:TWS与TAS模式实战解析(附代码示例)

本文深入解析相控阵雷达仿真中的TWS(边搜索边跟踪)与TAS(搜索加跟踪)模式,提供实战代码示例和优化策略。通过简化模型设计和对象化建模,帮助开发者快速构建高效仿真系统,适用于军事推演和装备评估。文章涵盖核心逻辑、数据结构设计及性能优化技巧,提升仿真效率与准确性。

weixin_30687051的博客 455

flink的一致性检查点三种算法

** flink的一致性检查点算法 ** Flink的恢复机制的核心就是应用状态的一致性检查点,有状态流的一致性检查点,其实就是所以状态在某个时间点的一份快照拷贝,而这个时间点应该是所有任务都恰好处理完同一个输入数据。 一般常见的检查点算法: 方法一:常用的某个时间点的快照 1)暂停所有输入流的摄取有,也就是不接受性的数据输入 2)等待所有摘出来的数据计算完毕,这就意味者结束时,所有任务都已经处理...

sghuu的博客 1378

STM32F103C8T6与OV7670摄像头在TFT屏上的实时数字识别系统实现

本文详细介绍了基于STM32F103C8T6单片机和OV7670摄像头实现实时数字识别系统的全过程。系统通过图像采集、预处理、二值化和模板匹配算法,在TFT屏上实时显示识别结果,并针对资源受限的单片机环境提供了内存与性能优化策略,适用于智能家居、工业仪表读数等低成本嵌入式视觉应用场景。

open4的博客 279

Docker:快速部署 Temporal 工作流引擎的技术指南

Temporal是一个开源的分布式工作流引擎,适用于复杂业务流程(如订单处理、支付流程等),提供状态持久化、自动重试、多语言SDK支持等特性。部署简单,支持Docker Compose,包含核心服务、Web UI及数据库。以TypeScript为例,开发者可快速编写工作流(如订单处理)和Worker,通过CLI或SDK启动和管理。Temporal简化了分布式系统的可靠性设计,适合电商、自动化任务等场景。

木头 644

Flink实战(10)-checkpoint容错保证

程序在 Flink 集群运行,某个算子因为某些原因出现故障,如何处理在故障恢复后,如何保证数据状态,和故障发生之前的数据状态一致?Checkpoint 能生成快照(Snapshot)。若 Flink 程序崩溃,重新运行程序时可以有选择地从这些快照进行恢复。Checkpoint 是 Flink 可靠性的基石。基于 checkpoint 机制的快照。

JavaEdge全是干货的技术号 1353

YOLO-World:从入门到实战的多模态目标检测全指南

想象一下,你给模型一张“公园”的图片,再输入文字“红色的郁金香”,它能直接在图中框出所有红色郁金香的位置——这就是多模态目标检测:结合图像视觉信息和文本语义信息,同时完成“是什么”(分类)和“在哪里”(定位)的任务。传统目标检测(如YOLOv5、YOLOv8)只能识别预定义的类别(比如训练时学过“猫”“狗”),但多模态目标检测摆脱了“类别预定义”的限制,只要文本能描述,它就能检测,这就是“开放词汇检测(Open-Vocabulary Detection)”的魅力。

know_F0727的博客 206

flink端到端状态一致性

目前我们看到的一致性保证都是由流处理器实现的,也就是说都是在 Flink 流 处理器内部保证的;而在真实应用中,流处理应用除了流处理器以外还包含了数据 源(例如 Kafka)和输出到持久化系统。 端到端的一致性保证,意味着结果的正确性贯穿了整个流处理应用的始终;每 一个组件都保证了它自己的一致性,整个端到端的一致性级别取决于所有组件中一 致性最弱的组件。具体可以划分如下: ⚫ 内部保证 —— 依赖 checkpoint ⚫ source 端 —— 需要外部源可重设数据的读取位置

song_quan_的博客 914

【项目实战】主流车载操作系统,QNX实时操作系统入门介绍

QNX是一种实时操作系统,自1980年代初期由Quantum Software Systems成立以来,已被广泛应用于各种行业和领域。QNX具有实时响应、高可靠性和分布式等特点,为各种设备提供了强大的底层操作系统平台。随着科技的不断发展和进步,QNX系统的应用范围和潜力也在不断扩大。本文将全面介绍QNX系统,包括其引言、背景、系统特性、应用领域和生态系统等方面。QNX作为一种实时操作系统,具有高效的实时性能、高可靠性、分布式、可剪裁性和可扩展性等特点。它在各个领域都有广泛的应用,并拥有一个庞大的生态系统。

奶爸的编程之路,也就一周冷个三天 3071

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Apache Flink 如何保证 Exactly-Once 语义

Apache Flink 通过状态一致性检查点和 Two-Phase Commit 协议来确保 Exactly-Once 语义。这些机制确保了数据在分布式系统中的一致性和准确性,从而提高了大数据处理的可靠性和准确性。在实际应用中,我们可以根据具体需求配置 Flink 的检查点策略和外部存储系统的写入策略,以实现更好的性能和可靠性。

1559

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: hive on spark引擎编译与测试
下一篇: Flink CEP - Flink的复杂事件处理
大数据左右手
博客等级 码龄9年 475粉丝 116原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值