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()方法
-----------专注于实时数仓,大数据存储、计算