【Flink-API】取消Kafka记录偏移量,flink管理偏移量

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
简介: 【Flink-API】取消Kafka记录偏移量,flink管理偏移量

一、偏移量


1.1 取消kafka偏移量


默认是使用kafka来管理偏移量,下面我们来取消他的管理机制,使用flink来管理偏移量,开启flink的容错重启机制,还有中间数据state的保存机制。

1.开启重启策略

2.stateBackend存储位置

3.取消任务checkpoint不删除

4.设置checkpoint的 EXACTLY_ONCE 模式

5.【重点】取消kafka管理偏移量,让flink来管理偏移量


1.2 kafka


创建topic如下,两个副本,四个分区


bin/kafka-topics.sh --create --zookeeper  hadoop1:2181,hadoop2:2181,hadoop3:2181 --replication


1.3 KafkaSourceV2.java

public class KafkaSourceV2 {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        // 开启重启策略
        env.enableCheckpointing(5000);
        // stateBackend
        env.setStateBackend(new FsStateBackend("file:///D://APP//IDEA//workplace//FlinkTurbineFaultDiagnosis//src//main//resources//checkpoint//chk001"));
        // 取消任务checkpoint不删除
        env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
        // 设置checkpoint的 EXACTLY_ONCE 模式
        env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
        //kafka配置
        String topic = "superman2";
        Properties prop = new Properties();
        prop.setProperty("bootstrap.servers","192.168.52.200:9092");//多个的话可以指定
        prop.setProperty("key.deserializer","org.apache.kafka.common.serialization.StringDeserializer");
        prop.setProperty("value.deserializer","org.apache.kafka.common.serialization.StringDeserializer");
        prop.setProperty("auto.offset.reset","earliest");
        prop.setProperty("group.id","consumer3");
        // 【重点】取消kafka管理偏移量,让flink来管理偏移量
        prop.setProperty("enable.auto.commit","false");
        FlinkKafkaConsumer<String> kafkaSource = new FlinkKafkaConsumer<>(topic, new SimpleStringSchema(), prop);
        DataStreamSource<String> lines = env.addSource(kafkaSource);
        DataStreamSource<String> lines2 = env.socketTextStream("192.168.52.200", 8888);
        // 模拟异常
        lines2.map(new MapFunction<String, String>() {
            @Override
            public String map(String s) throws Exception {
                if (s.startsWith("wangyining")){
                    System.out.println(1/0);
                }
                return s;
            }
        }).print();
        lines.print();
        env.execute();
    }
}


以上程序中的偏移量保存到了StateBackend的中间数据目录,来进行checkpoint,不但把保存到了这里,还保存到了kafka中偏移量,只是用来监控

20200923205140982.png


1.4 启动测试


1.开启端口号

nc -lk 8888

2.启动程序

3.启动kafka生产者,生产数据

bin/kafka-console-producer.sh --broker-list 192.168.52.200:9092,192.168.52.201:9092,192.168.52.202:9092 --topic superman2

20200923204307587.png

4.模拟异常

if (s.startsWith(“wangyining”)){
System.out.println(1/0);
}

20200923204457432.png


5.再次kafka输入命令,会发现已经重启成功,偏移量已经纪录成功。

20200923204613219.png

6.问题:程序出现了异常,恢复subTask,读取偏移量,从StateBackend恢复还是kafka中恢复?

答案:

6.1.StateBackend 偏移量目录,你会发现kafka中特殊的topic也有偏移量,但是它不是用来恢复的,是用来做监控的。

6.2.如果你不想让kafka中特殊的topic有偏移量,也可以取消。官网中这样记载。


20200923205441844.png

6.3.只需要添加一下:


// kafka中的偏移量取消掉【不建议false,默认是true,它用来监控这个偏移量】
        kafkaSource.setCommitOffsetsOnCheckpoints(false);


6.4.从kafka生产者中继续写数据的话,并没有从头读取,也不会从kafka中特殊的topic继续读取。


7.如果停掉程序呢?

7.1.如果开启了checkpointing,一定会保存到statebackend中去

7.2.没有指定savepoint的话,首先查看kafka特殊的topic,然后查看恢复文件。

目录
相关文章
|
1月前
|
人工智能 数据处理 API
阿里云、Ververica、Confluent 与 LinkedIn 携手推进流式创新,共筑基于 Apache Flink Agents 的智能体 AI 未来
Apache Flink Agents 是由阿里云、Ververica、Confluent 与 LinkedIn 联合推出的开源子项目,旨在基于 Flink 构建可扩展、事件驱动的生产级 AI 智能体框架,实现数据与智能的实时融合。
329 6
阿里云、Ververica、Confluent 与 LinkedIn 携手推进流式创新,共筑基于 Apache Flink Agents 的智能体 AI 未来
消息中间件 存储 传感器
202 0
|
5月前
|
消息中间件 SQL 关系型数据库
Flink CDC + Kafka 加速业务实时化
Flink CDC 是一种支持流批一体的分布式数据集成工具,通过 YAML 配置实现数据传输过程中的路由与转换操作。它已从单一数据源的 CDC 数据流发展为完整的数据同步解决方案,支持 MySQL、Kafka 等多种数据源和目标端(如 Delta Lake、Iceberg)。其核心功能包括多样化数据输入链路、Schema Evolution、Transform 和 Routing 模块,以及丰富的监控指标。相比传统 SQL 和 DataStream 作业,Flink CDC 提供更灵活的 Schema 变更控制和原始 binlog 同步能力。
|
6月前
|
消息中间件 运维 Kafka
直播预告|Kafka+Flink 双引擎实战:手把手带你搭建分布式实时分析平台!
直播预告|Kafka+Flink 双引擎实战:手把手带你搭建分布式实时分析平台!
224 12
|
6月前
|
消息中间件 运维 Kafka
直播预告|Kafka+Flink双引擎实战:手把手带你搭建分布式实时分析平台!
在数字化转型中,企业亟需从海量数据中快速提取价值并转化为业务增长动力。5月15日19:00-21:00,阿里云三位技术专家将讲解Kafka与Flink的强强联合方案,帮助企业零门槛构建分布式实时分析平台。此组合广泛应用于实时风控、用户行为追踪等场景,具备高吞吐、弹性扩缩容及亚秒级响应优势。直播适合初学者、开发者和数据工程师,参与还有机会领取定制好礼!扫描海报二维码或点击链接预约直播:[https://developer.aliyun.com/live/255088](https://developer.aliyun.com/live/255088)
508 35
直播预告|Kafka+Flink双引擎实战:手把手带你搭建分布式实时分析平台!
|
消息中间件 存储 SQL
网易云音乐基于 Flink + Kafka 的实时数仓建设实践
本文由网易云音乐实时计算平台研发工程师岳猛分享,主要从以下四个部分将为大家介绍 Flink + Kafka 在网易云音乐的应用实战: 背景、Flink + Kafka 平台化设计、Kafka 在实时数仓中的应用、问题 & 改进。
网易云音乐基于 Flink + Kafka 的实时数仓建设实践
|
3月前
|
存储 分布式计算 数据处理
「48小时极速反馈」阿里云实时计算Flink广招天下英雄
阿里云实时计算Flink团队,全球领先的流计算引擎缔造者,支撑双11万亿级数据处理,推动Apache Flink技术发展。现招募Flink执行引擎、存储引擎、数据通道、平台管控及产品经理人才,地点覆盖北京、杭州、上海。技术深度参与开源核心,打造企业级实时计算解决方案,助力全球企业实现毫秒洞察。
477 0
「48小时极速反馈」阿里云实时计算Flink广招天下英雄
|
10月前
|
消息中间件 关系型数据库 MySQL
Flink CDC 在阿里云实时计算Flink版的云上实践
本文整理自阿里云高级开发工程师阮航在Flink Forward Asia 2024的分享,重点介绍了Flink CDC与实时计算Flink的集成、CDC YAML的核心功能及应用场景。主要内容包括:Flink CDC的发展及其在流批数据处理中的作用;CDC YAML支持的同步链路、Transform和Route功能、丰富的监控指标;典型应用场景如整库同步、Binlog原始数据同步、分库分表同步等;并通过两个Demo展示了MySQL整库同步到Paimon和Binlog同步到Kafka的过程。最后,介绍了未来规划,如脏数据处理、数据限流及扩展数据源支持。
662 0
Flink CDC 在阿里云实时计算Flink版的云上实践
|
11月前
|
存储 关系型数据库 BI
实时计算UniFlow:Flink+Paimon构建流批一体实时湖仓
实时计算架构中,传统湖仓架构在数据流量管控和应用场景支持上表现良好,但在实际运营中常忽略细节,导致新问题。为解决这些问题,提出了流批一体的实时计算湖仓架构——UniFlow。该架构通过统一的流批计算引擎、存储格式(如Paimon)和Flink CDC工具,简化开发流程,降低成本,并确保数据一致性和实时性。UniFlow还引入了Flink Materialized Table,实现了声明式ETL,优化了调度和执行模式,使用户能灵活调整新鲜度与成本。最终,UniFlow不仅提高了开发和运维效率,还提供了更实时的数据支持,满足业务决策需求。
下一篇
oss云网关配置