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 @ 2022-11-20 21:48  博某园保安大队长  阅读(441)  评论(0)    收藏  举报