浅议用FlinkKafkaProducer实现sink端的Exactly Once语义

本文探讨了在Flink数据处理中如何通过FlinkKafkaProducer实现Sink端的Exactly Once语义。利用Flink的checkpoint机制和Kafka的事务特性,确保数据不丢失且不重复。主要涉及Flink程序的配置、Sink算子的状态快照以及Kafka消费者的隔离级别设置。
摘要由CSDN通过智能技术生成

摘要

在一些重要的flink数据加工场景中,实现Exactly Once(精确一次)的数据处理是必须的。Exactly Once意味着flink处理数据既能保证数据不丢失也能保证数据不重复。

整个flink处理链路大致分为 Source -> Transform -> Sink三个环节. 选用支持消息持久化和重置消费位点的kafka组件即可保证Source端的数据精确一次处理。依靠flink自身的checkpoint机制保证Transform阶段的数据精确一次处理。本文讨论选用支持事务的kafka实现Sink端的数据精确一次处理。

正文

基于flink1.13,使用官方提供的写入到kafka的FlinkKafkaProducer。为实现Exactly Once语义,flink程序需要如下相关配置:


//flink作业开启checkpoint
env.enableCheckpointing(interval);

//FlinkKafkaProducer 
Properties producerpros = new Properties();
producerpros.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "xx:9092");
/*
*   Flink 的 Kafka连接器中配置的事务超时时间 transaction.timeout.ms 默认是 1小时,
    而Kafka集群配置的事务最大超时时间 transaction.max.timeout.ms 默认是 15 分钟。
*   这两个超时时间,前者应该小于等于后者。
* */
producerpros.put(ProducerConfig.TRANSACTION_TIMEOUT_CONFIG, 600000);

//创建flinkkafkaProducer
FlinkKafkaProducer flinkKafkaProducer = new FlinkKafkaProducer(
        "topic",
        new KafkaProducerSerializationSchema("topic"),
        producerpros,
        FlinkKafkaProducer.Semantic.EXACTLY_ONCE  //EXACTLY_ONCE语义
);

(1)flink程序的相关配置及checkpoint流程

FlinkKafkaProducer通过继承TwoPhaseCommitSinkFunction间接实现了CheckpointedFunction, CheckpointListener两个接口。这意味着Sink算子(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值