内容:
本文主要介绍使用flink读写kafka,如何保证exactly-once
关键点:
Flink的checkpoint机制
Kafka source支持重新消费,手动commit
Kafka sink支持2PC(two-phase commit protocol)
flink实践任务配置:
Kafka端到端一致性需要注意的点:
- Flink任务需要开启checkpoint配置为CheckpointingMode.EXACTLY_ONCE
- Flink任务FlinkKafkaProducer需要指定参数Semantic.EXACTLY_ONCE
- Flink任务FlinkKafkaProducer配置需要配置transaction.timeout.ms,checkpoint间隔(代码指定)<transaction.timeout.ms(默认为1小时)<transaction.max.timeout.ms(默认为15分钟)
- 消费端在消费FlinkKafkaProducer的topic时需要指定isolation.level(默认为read_uncommitted)为read_committed
例如:
flink任务设置:
env.enableCheckpointing(XXX, CheckpointingMode.EXACTLY