检查点使得 Apache Flink 具有容错能力,并确保了即时发生故障也能保证流应用程序的语义。检查点是以固定的间隔来触发的,该间隔可以在应用中配置。

Apache Flink 中实现的 Kafka 消费者是一个有状态的算子(operator),它集成了 Flink 的检查点机制,它的状态是所有 Kafka 分区的读取偏移量。当一个检查点被触发时,每一个分区的偏移量都被存到了这个检查点中。Flink 的检查点机制保证了所有 operator task 的存储状态都是一致的。这里的“一致的”是什么意思呢?意思是它们存储的状态都是基于相同的输入数据。当所有的 operator task 成功存储了它们的状态,一个检查点才算完成。因此,当从潜在的系统故障中恢复时,系统提供了 excatly-once 的状态更新语义。

第一步:

如下所示,一个 Kafka topic,有两个partition,每个partition都含有 “A”, “B”, “C”, ”D”, “E” 5条消息。我们将两个partition的偏移量(offset)都设置为0.

第二步:

Kafka comsumer(消费者)开始从 partition 0 读取消息。消息“A”正在被处理,第一个 consumer 的 offset 变成了1。

第三步

消息“A”到达了 Flink Map Task。两个 consumer 都开始读取他们下一条消息(partition 0 读取“B”,partition 1 读取“A”)。各自将 offset 更新成 2 和 1 。同时,Flink 的 JobMaster 开始在 source 触发了一个检查点。

第四步

接下来,由于 source 触发了检查点,Kafka consumer 创建了它们状态的第一个快照(”offset = 2, 1”),并将快照存到了 Flink 的 JobMaster 中。Source 在消息“B”和“A”从partition 0 和 1 发出后,发了一个 checkpoint barrier。Checkopint barrier 用于各个 operator task 之间对齐检查点,保证了整个检查点的一致性。消息“A”到达了 Flink Map Task,而上面的 consumer 继续读取下一条消息(消息“C”)。

第五步

Flink Map Task 收齐了同一版本的全部 checkpoint barrier 后,那么就会将它自己的状态也存储到 JobMaster。同时,consumer 会继续从 Kafka 读取消息。

第六步

Flink Map Task 完成了它自己状态的快照流程后,会向 Flink JobMaster 汇报它已经完成了这个 checkpoint。当所有的 task 都报告完成了它们的状态 checkpoint 后,JobMaster 就会将这个 checkpoint 标记为成功。从此刻开始,这个 checkpoint 就可以用于故障恢复了。值得一提的是,Flink 并不依赖 Kafka offset 从系统故障中恢复。

故障恢复

在发生故障时(比如,某个 worker 挂了),所有的 operator task 会被重启,而他们的状态会被重置到最近一次成功的 checkpoint。Kafka source 分别从 offset 2 和 1 重新开始读取消息(因为这是完成的 checkpoint 中存的 offset)。当作业重启后,我们可以期待正常的系统操作,就好像之前没有发生故障一样。如下图所示:

九、Kafka 消费位点相关推荐

  1. 分布式系列九: kafka

    分布式系列九: kafka概念 官网上的介绍是kafka是apache的一种分布式流处理平台. 最初由Linkedin开发, 使用Scala编写. 具有高性能,高吞吐量的特定. 包含三个关键能力: 发 ...

  2. 跟我学Kafka:Kafka消费组运维详解

    作为一个Kafka初学者,需要快速成长,承担维护公司Kafka的重任,对Kafka的学习,我按照三步走策略: 阅读Kafka相关书籍 从运维实战的角度学习Kafka 阅读源码,体系化,精细化掌握其实现 ...

  3. sparkstreaming直接从kafka消费数据

    1.sparkstreaming直接从kafka消费数据 采用createDirectStream,示例: createDirectStream[K, V, KD <: Decoder[K],  ...

  4. kafka消费命令简化(alias中传入参数)

    我们常见的kafka消费命令是这样的: $KAFKA/bin/kafka-console-consumer.sh --bootstrap-server Desktop:9091 --from-begi ...

  5. kafka 消费端 api_在消费者的眼中:您真的需要为您的API提供客户端库吗?

    kafka 消费端 api RESTful Web服务和API的优点在于,任何使用HTTP协议的使用者都可以理解和使用它. 但是,同样的难题一遍又一遍地弹出:您是否应该将Web APis与客户端库一起 ...

  6. 【FLink】Flink 消费 kafka 消费组 死掉 Marking the coordinator dead for group 造成数据重复消费

    文章目录 1.概述 2.源码分析 2.2 能不能设置多次提交呢? 2.3 监控日志 1.概述 首先参考几个案例: [Flink]Flink Kafka 消费卡死 消费组卡死 topic无写入 实际有数 ...

  7. Kafka消费异常报Failing OffsetCommit request since the consumer

    目录 前言 排查与解决 总结 前言 前段时间线上某个业务系统的Kafka消费端出现数据异常,一直在重复消费某个时间段内的数据,导致界面上重复数据越来越多,询问运维发现前几日有出现过一次网络波动,推测可 ...

  8. 【kafka】kafka 消费数据的时候 报错 (Re-) join group

    文章目录 1.场景1 1.1 概述 2.场景2 3.场景3 1.场景1 1.1 概述 kafka 消费数据的时候 报错 如下 2.场景2 spirng-kafka的多consumer问题困扰了我好久, ...

  9. Kafka设计解析(十三)Kafka消费组(consumer group)

    转载自 huxihx,原文链接 Kafka消费组(consumer group) 一直以来都想写一点关于kafka consumer的东西,特别是关于新版consumer的中文资料很少.最近Kafka ...

最新文章

  1. 【VMware vSAN 6.6】5.1.基于存储策略的管理:vSAN硬件服务器解决方案
  2. 公司网络推广教你网站初期SEO优化该如何做?
  3. 【错误记录】Mac 中 IntelliJ IDEA 运行 Python 程序报错 ( End of statement expected )
  4. 数据库表字段命名规则
  5. boost::mpl模块实现pair_view相关的测试程序
  6. python中冒号报错_python新手常见错误和异常
  7. super与this关键字的区别
  8. mysql 获取年预提,【判断题】正确核算待摊费用和预提费用,有助于划分本期费用与非本期费用的界限。...
  9. python词汇网络分析_8个Python高效数据分析的技巧!
  10. 关于miniconda的安装,配置以及包批量安装和使用
  11. docker学习5--docker数据卷(volume)
  12. [转][.NET 基于角色安全性验证] 之一:基础知识
  13. Java的HttpClient类以POST方式提交数据,目标端收到后中文乱码
  14. MySQL主从同步(四)——M-M架构配置实战
  15. RocketMQ入门(2)最佳实践
  16. 403. 青蛙过河--(每日一难phase2--day10)
  17. java .jar怎么打开_详解jar文件怎么打开
  18. 电商搜索里都有啥?详解闲鱼搜索系统(长文)
  19. iOS 开发: 仿QQ
  20. module.exports 与 exports.xxx 的区别

热门文章

  1. java jama matrix转数组_Java Jama矩阵问题
  2. 从0开始学web-day7
  3. 深度学习-如何下载以及导入Datasets数据集
  4. JQuery Web前端JAVAscript 框架大全
  5. 如何在Word/WPS中插入noteExpress?
  6. 基于PaddlePaddle实现声音分类
  7. 【Linux 内核 内存管理】Linux 内核内存布局 ① ( 查看 Linux 操作系统位数 | 查看 Linux 操作系统软硬件信息 )
  8. 1.2 计算机的分类和应用
  9. 扣绩效工资,违反劳动法吗?
  10. Job for network.service failed虚拟机无法重启网络问题详解