Flink基于Kafka-Connector 数据流容错回放机制

Flink回撤流 Flink 的回撤流是指在 Flink 的流处理算法中,撤回已经发送到下游节点的数据。这是因为在实际应用场景中,有些错误数据可能会发送到下游节点,因此需要回撤流以保证数据的准确性。回撤流可以理解为流式场景下对数据进行更新,这里的更新数据并不是将发往下游的历史数据进行更改,要知道,已经发往下游的消息是追不回来的。 阅读详情

Flink基于Kafka-Connector 数据流容错回放机制及代码案例实战-Flink牛刀小试

Flink牛刀小试系列目录

1 Kafka-connector 再次亲密牵手Flink

  • Kafka中的partition机制和Flink的并行度机制深度结合,实现数据恢复。
  • Kafka可以作为Flink的source和sink,牛在这里。
  • 任务失败,通过设置kafka的offset来恢复应用

2 回顾Spark Streaming针对kafka使用技术

    // 设置检查点目录
    ssc.checkpoint("./streaming_checkpoint")

    // 获取Kafka配置(通过配置文件读取,ConfigurationManager自定义方法)
    val broker_list = ConfigurationManager.config.getString("kafka.broker.list")  
    val topics = ConfigurationManager.config.getString("kafka.topics")

    // kafka消费者配置
    val kafkaParam = Map(
      "bootstrap.servers" -> broker_list,//用于初始化链接到集群的地址
      "key.deserializer" -> classOf[StringDeserializer],
      "value.deserializer" -> classOf[StringDeserializer],
      //用于标识这个消费者属于哪个消费团体
      "group.id" -> "commerce-consumer-group",
      //如果没有初始化偏移量或者当前的偏移量不存在任何服务器上,可以使用这个配置属性
      //可以使用这个配置,latest自动重置偏移量为最新的偏移量
      "auto.offset.reset" -> "latest",
      //如果是true,则这个消费者的偏移量会在后台自动提交
      "enable.auto.commit" -> (false: java.lang.Boolean)
    )

    // 创建DStream,返回接收到的输入数据
    // LocationStrategies:根据给定的主题和集群地址创建consumer
    // LocationStrategies.PreferConsistent:持续的在所有Executor之间分配分区
    // ConsumerStrategies:选择如何在Driver和Executor上创建和配置Kafka Consumer
    // ConsumerStrategies.Subscribe:订阅一系列主题
    val adRealTimeLogDStream=KafkaUtils.createDirectStream[String,String](ssc,
      LocationStrategies.PreferConsistent,ConsumerStrategies.Subscribe[String,String](Array(topics),kafkaParam))

3 再论 Flink Kafka Consumer

3.1 理论时间

  • setStartFromGroupOffsets()【默认消费策略】

    默认读取上次保存的offset信息
    如果是应用第一次启动,读取不到上次的offset信息,则会根据这个参数auto.offset.reset的值来进行消费数据

  • setStartFromEarliest()
    从最早的数据开始进行消费,忽略存储的offset信息

  • setStartFromLatest()
    从最新的数据进行消费,忽略存储的offset信息

  • setStartFromSpecificOffsets(Map<KafkaTopicPartition, Long>)

  • 当checkpoint机制开启的时候,KafkaConsumer会定期把kafka的offset信息还有其他operator的状态信息一块保存起来。当job失败重启的时候,Flink会从最近一次的checkpoint中进行恢复数据,重新消费kafka中的数据。

  • 为了能够使用支持容错的kafka Consumer,需要开启checkpoint
    env.enableCheckpointing(5000); // 每5s checkpoint一次

  • Kafka Consumers Offset 自动提交有以下两种方法来设置,可以根据job是否开启checkpoint来区分:

    (1) Checkpoint关闭时: 可以通过下面两个参数配置

    enable.auto.commit

    auto.commit.interval.ms

    (2) Checkpoint开启时:当执行checkpoint的时候才会保存offset,这样保证了kafka的offset和checkpoint的状态偏移量保持一致。
    可以通过这个参数设置

    setCommitOffsetsOnCheckpoints(boolean)

    这个参数默认就是true。表示在checkpoint的时候提交offset, 此时,kafka中的自动提交机制就会被忽略

3.2 案例实战

 依赖引入:
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-statebackend-rocksdb_2.11</artifactId>
        <version>1.6.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-connector-kafka-0.11_2.11</artifactId>
        <version>1.6.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>0.11.0.3</version>
    </dependency>
    
 案例实战:
 public class StreamingKafkaSource {
    
    public static void main(String[] args) throws Exception {
        //获取Flink的运行环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        //checkpoint配置
        env.enableCheckpointing(5000);
        env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
        env.getCheckpointConfig().setMinPauseBetweenCheckpoints(500);
        env.getCheckpointConfig().setCheckpointTimeout(60000);
        env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
        env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);

        //设置statebackend

        //env.setStateBackend(new RocksDBStateBackend("hdfs://hadoop100:9000/flink/checkpoints",true));


        String topic = "kafkaConsumer";
        Properties prop = new Properties();
        prop.setProperty("bootstrap.servers","SparkMaster:9092");
        prop.setProperty("group.id","kafkaConsumerGroup");

        FlinkKafkaConsumer011<String> myConsumer = new FlinkKafkaConsumer011<>(topic, new SimpleStringSchema(), prop);

        myConsumer.setStartFromGroupOffsets();//默认消费策略

        DataStreamSource<String> text = env.addSource(myConsumer);

        text.print().setParallelism(1);

        env.execute("StreamingFromCollection");
    }
}

4 再论 Flink Kafka Producer

 

4.1 理论时间

  • Kafka Producer的容错-Kafka 0.9 and 0.10

  • 如果Flink开启了checkpoint,针对FlinkKafkaProducer09和FlinkKafkaProducer010 可以提供 at-least-once的语义,还需要配置下面两个参数:

    setLogFailuresOnly(false)

    setFlushOnCheckpoint(true)

  • 注意:建议修改kafka 生产者的重试次数retries【这个参数的值默认是0】

  • Kafka Producer的容错-Kafka 0.11,如果Flink开启了checkpoint,针对FlinkKafkaProducer011 就可以提供 exactly-once的语义,但是需要选择具体的语义

    Semantic.NONE

    Semantic.AT_LEAST_ONCE【默认】

    Semantic.EXACTLY_ONCE

4.2 KafkaSink案例实战

 public class StreamingKafkaSink {
    public static void main(String[] args) throws Exception {
    //获取Flink的运行环境
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();


    //checkpoint配置
    env.enableCheckpointing(5000);
    env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
    env.getCheckpointConfig().setMinPauseBetweenCheckpoints(500);
    env.getCheckpointConfig().setCheckpointTimeout(60000);
    env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
    env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);

    //设置statebackend

    //env.setStateBackend(new RocksDBStateBackend("hdfs://SparkMaster:9000/flink/checkpoints",true));


    DataStreamSource<String> text = env.socketTextStream("SparkMaster", 9001, "\n");

    String brokerList = "SparkMaster:9092";
    String topic = "kafkaProducer";

    Properties prop = new Properties();
    prop.setProperty("bootstrap.servers",brokerList);

    //第一种解决方案,设置FlinkKafkaProducer011里面的事务超时时间
    //设置事务超时时间
    //prop.setProperty("transaction.timeout.ms",60000*15+"");

    //第二种解决方案,设置kafka的最大事务超时时间,主要是kafka的配置文件设置。

    //FlinkKafkaProducer011<String> myProducer = new FlinkKafkaProducer011<>(brokerList, topic, new SimpleStringSchema());

    //使用仅一次语义的kafkaProducer
    FlinkKafkaProducer011<String> myProducer = new FlinkKafkaProducer011<>(topic, new KeyedSerializationSchemaWrapper<String>(new SimpleStringSchema()), prop, FlinkKafkaProducer011.Semantic.EXACTLY_ONCE);
    text.addSink(myProducer);


    env.execute("StreamingFromCollection");


  }
}

5 结语

kafka必不可少,关于kafka还有很多要说的内容,详情请参考我的kafka商业环境实战系列吧。

版权声明:本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。版权声明:禁止转载,欢迎学习。QQ邮箱地址:1120746959@qq.com,如有任何问题,可随时联系。

(exactly-once)Flink 如何实现端到端的一致性(kafka+flink+kafka) flink 内部实现 exactly-once 原理!Checkpoint 原理!两次提交原理 阅读详情

相关推荐

面对交互式SQL的云原生流式引擎实现:k8s Flink集群对接kafka与clickHouse一体化方案

本文摘要:文章系统讲解了基于FlinkSQLGateway的实时数据处理平台核心技术体系,重点涵盖:1)SQLGateway架构与K8s部署;2)Kafka实时流接入规范(表定义、鉴权、优化);3)ClickHouse写入机制与性能调优;4)Checkpoint容错体系与状态管理;5)监控告警与多租户安全管控。核心在于SQLGateway会话管理、K8s资源调度、流表DDL规范、状态容错机制以及企业级运维方案,形成从数据接入、处理到存储的全链路生产级解决方案。(149字)

tian_jiangnan的博客 290

flink回撤流分析

flink回撤流

wisgood的专栏 3371

Flink Connector开发指南:自定义数据源与接收器

本文旨在为具备 Flink 基础的开发者提供系统化的 Connector 开发指南,覆盖从基础概念到实战落地的全流程。内容聚焦自定义数据源(Source)与接收器(Sink)的设计原理、接口实现、容错处理及性能优化,结合具体代码案例解析核心技术点,帮助读者掌握在 Flink 中构建定制化数据接入层的能力。核心概念:解析 Flink Connector 架构,对比 Source/Sink 接口体系开发范式。

AI 原生应用开发的博客 477

Flink基于Kafka-Connector 数据流容错回放机制及代码案例实战-Flink牛刀小试

版权声明:本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。版权声明:禁止转载,欢迎学习。QQ邮箱地址:1120746959@qq.com,如有任何问题,可随时联系。 Flink牛刀小试系列目录 Flink牛刀小试-Flink 集群运行原理兼部署及Yarn运行模式深入剖析 Flink牛...

weixin_33881753的博客 392

kafka-playback-service:卡夫卡播放服务

卡夫卡播放服务 一个在卡夫卡经纪人之间进行某种“回放”的项目; 在一定的时间间隔内以指定的速度从一个Kafka中提取消息并将其发送给另一个。

保姆级教程:用PyTorch从零实现SDE扩散模型(附完整代码与MNIST实战)

本文提供了一份详细的PyTorch教程,指导读者从零开始实现SDE扩散模型,并附有完整的代码示例和MNIST数据集实战。通过解释随机微分方程(SDE)的核心概念、模型架构设计、训练流程实现以及采样生成过程,帮助开发者掌握扩散模型的构建与应用。

weixin_28677005的博客 269

Flink Task重启之后重复消费Kafka消息问题解决

我的项目是从Kafka消费消息,计算之后发送到elasticsearch存储。 现象:每次重启Flink Task,都会往elasticsearch发送已经计算过的数据。比如本来elasticsearch有3条记录,在不往Kafka生产新消息的情况下,重新启动Flink Task之后有6条,再重启是12条,说明数据重复。 初步怀疑是重复消费Kafka的消息,可能是offset没有提交。于是在Fli...

qq_35939417的博客 7363

海康视觉平台VisionMaster实战入门:从通讯配置到工具应用

本文为海康VisionMaster视觉平台实战入门指南,详细介绍了从软件安装准备、与PLC等外部设备的通讯配置,到匹配定位、测量、畸变矫正等核心工具的应用方法。通过实战案例拆解,帮助工程师快速掌握如何搭建完整的机器视觉检测与引导定位系统,实现工业自动化项目落地。

weixin_29224309的博客 1021

Flink Kafka connector详解

在Flink中提供了特殊的Connectors从kafka中读写数据,它基于Kafka Consumer API以及Producer API封装了自己的一套API来连接kafka,即可读取kafka中的数据流,也可以对接数据流到kafka中,基于kafka的partition机制,实现了并行化数据切片。下面让我们来看看它的主要API以及使用。 Flink kafka consumer 使用kafk...

不清不慎的博客 4972

mtk-drm初始化

mtk-drm初始化走读

zhexingsunba的博客 4940

GradNorm:Gradient Normalization for Adaptive Loss Balancing in Deep Multitask Networks,梯度归一化

文章目录引言gradnorm   gradnorm论文地址:https://arxiv.org/abs/1711.02257   gradnorm是一种优化方法,在多任务学习(Multi-Task Learning)中,解决 1. 不同任务loss梯度的量级(magnitude)不同,造成有的task在梯度反向传播中占主导地位,模型过分学习该任务而忽视其它任务;2. 不同任务收敛速度不一致;这两个...

Leon_winter的博客 2万+

干货 | Flink Connector 深度解析

作者介绍:董亭亭,快手大数据架构实时计算引擎团队负责人。目前负责 Flink 引擎在快手内的研发、应用以及周边子系统建设。2013 年毕业于大连理工大学,曾就职于奇虎 3...

Hadoop技术博文 2190

1、机器学习在环境科学中的应用与经典数据分析基础

本文介绍了机器学习在环境科学中的广泛应用,包括卫星遥感、气候预测、空气质量预报等领域,并系统回顾了经典数据分析的基本概念,如期望、方差、协方差和相关性及其显著性检验。同时,文章阐述了贝叶斯定理、判别函数与分类、聚类分析等方法的原理与应用,强调了经典统计方法与机器学习技术的互补关系。最后展望了未来环境科学中数据分析的发展方向,强调多学科融合与方法创新的重要性。

stone的博客 145

Apache Flink Kafka Connector 项目推荐

Apache Flink Kafka Connector 项目推荐 1. 项目基础介绍和主要编程语言 Apache Flink Kafka Connector 是一个开源项目,旨在为 Apache Flink 提供与 Apache Kafka 的集成支持。该项目的主要编程语言是 Java,同时也包含少量的 Python 和 Shell 脚本。Apache Flink 是一个强大的流处理框架,而 K...

gitblog_00136的博客 389

EPLAN中2D安装板的绘制方法示例

EPLAN中2D安装板的绘制方法示例

Robot_PLC_HMI_Automation 3224

gem5-gpu教程01 部署(实测可跑通)

这将GPGPU-Sim更新为与gem5-gpu兼容的最新版本。此版本是已知可用于gem5 gpu的最新版本。

qq_20388971的博客 1406

5.3、Flink流处理(Stream API)- Connector(连接器) 之 Apache Kafka Connector

目录 安装Kafka Kafka 1.0.0+ Connector 兼容性 从0.11迁移到通用的 Kafka Connector上 用法 Kafka Consumer 反序列化类DeserializationSchema 消费者开始消费位置配置 Kafka 消费和容错 Kafka消费者主题及Partition Discovery Partition discovery ...

主要写大数据集群一线运维和学习工作经验 3086

【滚雪球学数学建模】第1节·建模入门+三步法+案例

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 6413

Flink Connector Kafka深度剖析与进阶实践指南

在大数据实时处理的技术栈中,Flink和Kafka堪称黄金搭档。Flink以卓越的流处理能力和低延迟特性占据一席之地,Kafka则凭借高吞吐量与强大的可扩展性成为分布式消息队列的佼佼者。而Flink Connector Kafka作为连接二者的关键枢纽,承载着数据在Flink与Kafka之间高效传输与交互的重任。本文将对Flink Connector Kafka进行深度挖掘,从底层原理到复杂应用场景,全方位剖析其技术细节与实践要点。

qq_42773076的博客 887

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Flink Kafka Connector 与 Exactly Once 剖析

Flink Kafka Connector 是 Flink 内置的 Kafka 连接器,它包含了从 Kafka Topic 读入数据的 Flink Kafka Consu...

Ververica的博客 465

蓝牙模块HM-10手册

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

Flink 高分笔记

这篇博客文章总结了Flink流计算相关的基础知识和实践指南。主要内容包括:1) 流计算基础概念,如事件时间、Watermark机制、Exactly-once语义;2) Flink基础操作,如安装部署、程序结构、并发设置、故障恢复;3) DataStream API核心功能,包括时间概念、窗口计算、状态管理、双流Join等;4) Table API与SQL的使用方法和工作原理。文章提供了丰富的技术文档链接,涵盖了Flink从入门到进阶的各个方面,既有理论讲解也有实践案例,是一个系统的Flink学习资源合集。

SmartSi 1714

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Flink Kafka Connector与Exactly Once剖析

Flink Kafa Connector是Flink内置的Kafka连接器,它包含了从Kafka Topic读入数据的Flink Kafka Consumer以及向Kafka Topic写出数据的Flink Kafka Producer,除此之外Flink Kafa Connector基于Flink Checkpoint机制提供了完善的容错能力。本文从Flink Kafka Connector的基...

weixin_33828101的博客 219

Flink CDC Kafka连接器:高吞吐实时数据流管道构建

在当今数据驱动的业务环境中,企业面临着实时数据集成的严峻挑战:传统ETL工具难以满足毫秒级延迟要求,批处理架构无法应对高频数据变更,而分布式系统的复杂性又导致数据一致性难以保障。Flink CDC(Change Data Capture,变更数据捕获)作为基于Apache Flink的流式数据集成工具,通过Kafka连接器构建的实时数据流管道,为解决这些痛点提供了革命性方案。 本文将系统讲解Fl...

gitblog_00582的博客 1245

Flink:Kafka

Flink:Kafka

大连赵哥的博客 1575

flink从kafka读取数据

好的,我们来讲解如何在 Apache Flink 中从 Apache Kafka 读取数据。这是构建实时流处理应用的一个常见场景。

2301_80954266的博客 496
上一篇: hive 数据倾斜、优化策略、hive执行过程、垃圾回收
下一篇: Kafka之精确一次处理语义
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值