Kafka如何实现幂等性(4大关键点)

幂等性

幂等性(Idempotence): 是指一个操作可以执行多次,但其执行的结果与执行一次的结果相同。

换句话说,无论执行多少次,系统的最终状态保持一致。

Kafka如何实现幂等性(4大关键点)-mikechen

幂等性通常用于设计容错系统,保证在发生重试或网络异常时不会导致系统状态异常。

假设一个银行账户的余额是 100 元,执行一个“加款 10 元”的操作。

如果这个操作被重复执行了两次,账户余额就会变成 120 元,这显然不是我们期望的结果。

Kafka幂等性

Kafka 幂等性:是指 Kafka 生产者(Producer),向 Kafka Broker 发送消息时。

即使由于网络抖动…等原因,导致消息被重复发送,Broker 最终也只会持久化一条相同的消息。

Kafka如何实现幂等性(4大关键点)-mikechen

Kafka 的幂等性是生产者端的特性,它解决的是在单个生产者会话(Producer Instance)内,向单个分区(Partition)发送消息时的重复写入问题。

如何解决Kafka幂等性?

Kafka通过以下机制实现幂等写入:

Kafka如何实现幂等性(4大关键点)-mikechen

首先,启用幂等生产者配置。

enable.idempotence=true

 

其次,两个关键实现。

Kafka Producer端会自动生成以下标识:

Producer ID(PID)

Kafka 为每个生产者实例分配一个唯一的 PID,这个 PID 在生产者的整个生命周期内保持不变。

序列号(Sequence Number)

对于每个 PID,生产者发送的每条消息都会有一个单调递增的序列号。

当 Broker 接收到来自某个 PID 的消息时,它会记录下该 PID 最近接收到的 SeqNumber。

如果 Broker 再次收到来自相同 PID 、且 SeqNumber 小于、或等于已记录的 SeqNumber 的消息。

就会判断这条消息是重复的,并直接将其丢弃,而不会再次写入到 Partition 中。

Kafka幂等性总结

Kafka的幂等性是为了解决Producer在网络波动、超时、重试等情况下的消息重复发送问题。

Kafka如何实现幂等性(4大关键点)-mikechen

启用幂等性后,Kafka保证即使Producer重试消息发送,同一消息也只会在分区中出现一次。

幂等性依赖Producer ID 和 消息序列号 实现精确去重。

Kafka默认开启幂等性(在新版本中,如使用事务时),但也可以通过配置手动启用。

幂等性适用于**“只发一次”**的语义,但其范围不包括消费端处理、跨多个主题或分区的一致性(这需要事务支持)。

 

mikechen

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复架构即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法