Flink-Exactly once(精确一次)

目的:保证数据在生产,消费,sink端都只被精确一次。保证结果一致性。

为了达到这目的,采用的措施有:

1,生产端:往Kafka生产数据时有幂等,ack,事务,三个措施。

ps:幂等:无论数据输入多少次,只被记录一次

       ack:生产者往Kafka的topic的某个分区写数据时的一个机制。当ack=0:生产者只管发送数据到patition,不需要等待patition汇报完成,性能最好。当ack=1:生产者发送数据时,需要等待一个分区副本汇报完成即可返回。当ack:-1:生产者在发送数据时需要等待所有的副本都保存成功才能返回,安全性最好。

     事务:批量操作,要么全部成功要么全部失败。

2,消费端

通过check point保存每次计算的状态和消费的偏移量到HDFS。这个过程从source到sink。

3,sink端

Flink sink可以到mysql或者kafka,如果写入到mysql。则,因为有check point 所以可以做到Exactly once。但是写入到Kafka中的数据无法撤回,所以在写入kafka时可以可以在两个check point中间写入的数据作为一次事务(要么都写入成功,要么都写入失败),开启事务会导致数据的延时。

       

posted @   博某园保安大队长  阅读(401)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
点击右上角即可分享
微信分享提示