Kafka幂等性原理及实现剖析

https://www.cnblogs.com/smartloli/p/11922639.html

个人总结关键点:

为什么引入幂等性?

Producer在生产发送消息时,难免会重复发送消息。Producer进行retry时会产生重试机制,发生消息重复发送。而引入幂等性后,重复发送只会生成一条有效的消息

幂等性的实现原理?

  • ProducerID:在每个新的Producer初始化时,会被分配一个唯一的ProducerID,这个ProducerID对客户端使用者是不可见的。
  • SequenceNumber:对于每个ProducerID,Producer发送数据的每个Topic和Partition都对应一个从0开始单调递增的SequenceNumber值。
  • 在每条消息中附带了PID(ProducerID)和SequenceNumber。相同的PID和SequenceNumber发送给Broker,而之前Broker缓存过之前发送的相同的消息,那么在消息流中的消息就只有一条,不会出现重复发送的情况

幂等性是在0.11版本之后引入的,PID在org.apache.kafka.clients.producer.internals.Sender中的maybeWaitForProducerId()方法

 

posted @ 2020-03-30 08:36  再见傅里叶  阅读(604)  评论(0编辑  收藏  举报