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中间写入的数据作为一次事务(要么都写入成功,要么都写入失败),开启事务会导致数据的延时。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期