美文网首页工具大数据
昨天面试别人说他熟悉Flink,结果我问了他Flink是如何实现

昨天面试别人说他熟悉Flink,结果我问了他Flink是如何实现

作者: 大数据技术与架构 | 来源:发表于2019-08-19 23:43 被阅读0次

    Flink跟其他的流计算引擎相比,最突出或者做的最好的就是状态的管理.

    什么是状态呢?比如我们在平时的开发中,需要对数据进行count,sum,max等操作,这些中间的结果(即是状态)是需要保存的,因为要不断的更新,这些值或者变量就可以理解为是一种状态,拿读取kafka为例,我们需要记录数据读取的位置(即是偏移量),并保存offest,这时offest也可以理解为是一种状态.

    Flink是怎么保证容错恢复的时候保证数据没有丢失也没有数据的冗余呢?

    checkpoint是使Flink 能从故障恢复的一种内部机制。检查点是 Flink 应用状态的一个一致性副本,包括了输入的读取位点。在发生故障时,Flink 通过从检查点加载应用程序状态来恢复,并从恢复的读取位点继续处理,就好像什么事情都没发生一样。Flink的状态存储在Flink的内部,这样做的好处就是不再依赖外部系统,降低了对外部系统的依赖,在Flink的内部,通过自身的进程去访问状态变量.同时会定期的做checkpoint持久化,把checkpoint存储在一个分布式的持久化系统中,如果发生故障,就会从最近的一次checkpoint中将整个流的状态进行恢复.

    下面就来介绍一下Flink从Kafka中获取数据,怎么管理offest实现exactly-once的.

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

    下面我们将一步步地介绍 Apache Flink 中的 Kafka 消费位点是如何做检查点的。

    在本文的例子中,数据被存在了 Flink 的 JobMaster 中。值得注意的是,在 生产用例下,这些数据最好是能存到一个外部文件系统(如HDFS或S3)中。

    故障恢复

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

    Flink的checkpoint是基于Chandy-Lamport算法的分布式一致性快照,如果想更加深入的了解Flink的checkpoint可以去了解一下这个算法.

    — THE END —

    ◤半年文章精选系列◥

    Flink从入门到放弃之源码解析系列

    • 《Flink组件和逻辑计划》

    • Flink执行计划生成

    • JobManager中的基本组件(1)

    • JobManager中的基本组件(2)

    • JobManager中的基本组件(3)

    • TaskManager

    • 算子

    • 网络

    • 水印WaterMark


    • CheckPoint

    • 《任务调度及负载均衡》

    • 《异常处理》

    大数据成神之路-基础篇

    • 《HashSet》

    • 《HashMap》

    • 《LinkedList》

    • 《ArrayList/Vector》

    • 《ConcurrentSkipListMap》

    • 《ConcurrentHashMap1.7》

    • 《ConcurrentHashMap1.8 Part1》

    • 《ConcurrentHashMap1.8 Part2》

    • 《CopyOnWriteArrayList》

    • 《CopyOnWriteArraySet》

    • 《ConcurrentLinkedQueue》

    • 《LinkedBlockingDeque》

    • 《LinkedBlockingQueue》

    • 《ArrayBlockingQueue》

    • 《ConcurrentSkipListSet》

    大数据成神之路-进阶篇

    • 《JVM&NIO基础入门》

    • 《分布式理论基础和原理》

    • 《分布式中的常见问题解决方案(分布式锁/事务/ID)》

    • 《Zookeeper》

    • 《RPC》

    • 《Netty入门篇》

    • 《Netty源码篇》

    • 《Linux基础》

    Flink入门系列

    • Flink入门

    • Flink DataSet&DataSteam API

    • Flink集群部署

    • Flink重启策略

    • Flink分布式缓存

    • Flink广播变量

    • Flink中的Time

    • Flink中的窗口

    • 时间戳和水印

    • 《Broadcast广播变量》

    • 《Flink-Kafka-Connector》

    • 《Flink之Table-&-SQL》

    • 《Flink实战项目之实时热销排行》

    • 《Flink-Redis-Sink》

    • 《Flink消费Kafka写入Mysql》

    Flink高级进阶

    • 《FaultTolerance》

    • 《流表对偶(duality)性》

    • 《持续查询(ContinuousQueries)》

    • 《DataStream-Connectors之Kafka》

    • 《SQL概览》

    • 《JOIN 算子》

    • 《TableAPI》

    • 《JOIN-LATERAL》

    • 《JOIN-LATERAL-Time Interval(Time-windowed)》

    • 《Temporal-Table-JOIN》

    • 《State》

    • 《FlinkSQL中的回退更新-Retraction》

    • 《Apache Flink结合Apache Kafka实现端到端的一致性语义》

    • 《Flink1.8.0发布!新功能抢先看》

    • 《Flink1.8.0重大更新-Flink中State的自动清除详解》

    • 《Flink在滴滴出行的应用与实践》

    • 《批流统一计算引擎的动力源泉—Flink Shuffle机制的重构与优化》

    • 《HBase分享 | Flink+HBase场景化解决方案》

    • 《腾讯基于Flink的实时流计算平台演进之路》

    • 《Flink进阶-Flink CEP(复杂事件处理)》

    • 《Flink基于EventTime和WaterMark处理乱序事件和晚到的数据》

    • 《Flink 最锋利的武器:Flink SQL 入门和实战》

    • 《Flink Back Pressure》

    • 《使用Flink读取Kafka中的消息》

    • 《Flink on YARN部署快速入门指南》

    • 《Apache Flink状态管理和容错机制介绍》

    Hadoop生态圈系列

    • 《Hadoop极简入门》

    • 《MapReduce编程模型和计算框架架构原理》

    • 《分布式文件系统-HDFS》

    • 《YARN》

    • 《Hadoop机架感知》

    • 《HDFS的一个重要知识点-HDFS的数据流》

    • 《Hadoop分布式缓存(DistributedCache)》

    • 《如何从根源上解决 HDFS 小文件问题》(https://dwz.cn/FqDPpRUc)

    • 《Hadoop解决小文件存储思路》(https://dwz.cn/2oCdmCkw)

    • 《Hadoop所支持的几种压缩格式》

    • 《MapReduce Join》

    • 《YARN Capacity Scheduler(容量调度器)》

    • 《hadoop上搭建hive》

    • 《基于Hadoop的数据仓库Hive基础知识》

    • 《Hive使用必知必会系列》

    • 《一个小知识点-Hive行转列实现Pivot》

    • 《面试必备技能-HiveSQL优化》

    • 《HBase和Hive的区别和各自适用的场景》

    • 《一篇文章入门Hbase》

    • 《敲黑板:HBase的RowKey设计》

    • 《HBase读写优化》

    • 《HBase在滴滴出行的应用场景和最佳实践》

    • 《Phoenix=HBase+SQL,让HBase插上了翅膀》

    • 《一个知识点将你拒之门外之Hbase的二级索引》(https://dwz.cn/umfBOZ5l)

    • 《Phoenix重磅 | Phoenix核心功能原理及应用场景介绍》

    • 《DB、DW、DM、ODS、OLAP、OLTP和BI的概念理解》

    • 《Hive/HiveSQL常用优化方法全面总结》

    实时计算系列(spark、kafka等)

    • 《Spark Streaming消费Kafka数据的两种方案》

    • 《Apache Kafka简单入门》

    • 《你不得不知道的知识-零拷贝》

    • 《Kafka在字节跳动的实践和灾备方案》

    • 《万字长文干货 | Kafka 事务性之幂等性实现》

    • 《Kafka最佳实践》

    • 《Kafka Exactly-Once 之事务性实现》

    • 《Kafka连接器深度解读之错误处理和死信队列》

    • 《Spark之数据倾斜调优》

    • 《Structured Streaming 实现思路与实现概述》

    • 《Spark内存调优》

    • 《广告点击数实时统计:Spark StructuredStreaming + Redis Streams》

    • 《Spark Shuffle在网易的优化》

    • 《SparkSQL极简入门》

    • 《下一代分布式消息队列Apache Pulsar》

    • 《Pulsar与Kafka消费模型对比》

    • 《Spark SQL重点知识总结》

    • 《Structured Streaming 之状态存储解析》

    • 《周期性清除Spark Streaming流状态的方法》

    • 《Spark Structured Streaming特性介绍》

    • 《Spark Streaming 反压(Back Pressure)机制介绍》

    • 《Spark 从 Kafka 读数设置子并发度问题》

    规范和系统设计

    • 《阿里云10 PB+/天的日志系统设计和实现》

    • 《阿里云Redis开发规范》

    • 《Java中多个ifelse语句的替代设计》

    • 《面试系列:十个海量数据处理方法大总结》

    杂谈

    • 《作为面试官的一点点感悟,谈谈技术人的成长之路》

    • 《成年人的世界没有容易二字》

    • 《我最近在关注的事》

    • 《真香》

    • 《简单说说学习这件事》

    • 《20多岁做什么,将来才不会后悔》

    • 《2019-05-12最近的总结》

    • 《我军新闻联播气势+9999》

    • 《周末分享 | 高手的战略》

    • 《周末分享 | 快速定位自己的缺点》

    • 《周末分享 | 我见过最高级的聪明是靠谱》


    相关文章

      网友评论

        本文标题:昨天面试别人说他熟悉Flink,结果我问了他Flink是如何实现

        本文链接:https://www.haomeiwen.com/subject/slbysctx.html