kafka学习之Exactly Once()-Kafka
kafka学习之Exactly Once()
将服务器的ACK在设置为-1,可以保证producer到server之间的数据不丢失 即at least once 。
将服务器的ACK级别设置为0,可以保证生产者每条消息只会被发送一次 即at most once。
at least once 可以保证数据不丢失 但是不能保证数据不重复,相对的 at most once 可以保证数据不重复 但是不能保证数据不丢失
对于一些非常重要的信息 下游数据消费者要求数据既不重复也不丢失 Exactly Once
幂等性:就是指producer无论向server发送多少次重复的数据,server端只会持久化一条,幂等性结合at least once就构成了exactly once
要启用幂等性,只需要将 Producer 的参数中 enable.idompotence 设置为 true 即可。Kafka的幂等性实现其实就是将原来下游需要做的去重放在了数据上游。开启幂等性的 Producer 在初始化的时候会被分配一个 PID,发往同一 Partition 的消息会附带 Sequence Number。而Broker 端会对<PID, Partition, SeqNumber>做缓存,当具有相同主键的消息提交时,Broker 只会持久化一条。但是 PID 重启就会变化,同时不同的 Partition 也具有不同主键,所以幂等性无法保证跨分区跨会话的 Exactly Once
将服务器的ACK在设置为-1,可以保证producer到server之间的数据不丢失 即at least once 。
将服务器的ACK级别设置为0,可以保证生产者每条消息只会被发送一次 即at most once。
at least once 可以保证数据不丢失 但是不能保证数据不重复,相对的 at most once 可以保证数据不重复 但是不能保证数据不丢失
对于一些非常重要的信息 下游数据消费者要求数据既不重复也不丢失 Exactly Once
幂等性:就是指producer无论向server发送多少次重复的数据,server端只会持久化一条,幂等性结合at least once就构成了exactly once
要启用幂等性,只需要将 Producer 的参数中 enable.idompotence 设置为 true 即可。Kafka的幂等性实现其实就是将原来下游需要做的去重放在了数据上游。开启幂等性的 Producer 在初始化的时候会被分配一个 PID,发往同一 Partition 的消息会附带 Sequence Number。而Broker 端会对<PID, Partition, SeqNumber>做缓存,当具有相同主键的消息提交时,Broker 只会持久化一条。但是 PID 重启就会变化,同时不同的 Partition 也具有不同主键,所以幂等性无法保证跨分区跨会话的 Exactly Once