Flink和Kafka连接时的精确一次保证

端到端的精确一次性保证

既然是端到端的exactly-once,我们可以从三个组件的角度来进行分析:
(1)Flink内部
Flink内部可以通过检查点机制保证状态和处理结果的exactly-once语义。
(2)输入端
输入数据源端的Kafka可以对数据进行持久化保存,并可以重置偏移量(offset)。所以我们可以在Source任务(FlinkKafkaConsumer)中将当前读取的偏移量保存为算子状态,写入到检查点中;当发生故障时,从检查点中读取恢复状态,并由连接器FlinkKafkaConsumer向Kafka重新提交偏移量,就可以重新消费数据、保证结果的一致性了。
(3)输出端
输出端保证exactly-once的最佳实现,当然就是两阶段提交(2PC)。作为与Flink天生一对的Kafka,自然需要用最强有力的一致性保证来证明自己。
也就是说,我们写入Kafka的过程实际上是一个两段式的提交:处理完毕得到结果,写入Kafka时是基于事务的“预提交”;等到检查点保存完毕,才会提交事务进行“正式提交”。如果中间出现故障,事务进行回滚,预提交就会被放弃;恢复状态之后,也只能恢复所有已经确认提交的操作。

整体流程

在这里插入图片描述

相关推荐

  1. 69、Flink DataStream Connector 之 Kafka 连接器详解

    2023-12-20 06:44:04       20 阅读
  2. kafka消息积压排查

    2023-12-20 06:44:04       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-20 06:44:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-20 06:44:04       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-20 06:44:04       82 阅读
  4. Python语言-面向对象

    2023-12-20 06:44:04       91 阅读

热门阅读

  1. Android 版本控制工具--Git

    2023-12-20 06:44:04       64 阅读
  2. ALVR 编译 windwos && android [Streamer &Client]

    2023-12-20 06:44:04       71 阅读
  3. Stream流中anyMatch和allMatch和noneMatch的区别

    2023-12-20 06:44:04       59 阅读
  4. Android Uri scheme协议file转content

    2023-12-20 06:44:04       61 阅读
  5. XML + 4种常见解析方式

    2023-12-20 06:44:04       49 阅读
  6. Go实现对XML的读取和修改

    2023-12-20 06:44:04       73 阅读