Kafka生产者幂等性
时间: 2025-04-29 15:55:46 浏览: 29
### Kafka 生产者幂等性特性
Kafka 提供了生产者幂等性的功能,这确保消息不会被重复发送到主题中。当启用幂等性时,即使客户端重试机制触发多次调用 `send` 方法,也只会向目标分区写入一次消息[^1]。
#### 实现方式
为了实现这一特性,Kafka 使用了一种称为序列号(Sequence Number)的技术来跟踪每条记录的状态。每当 Producer 向特定的主题分区发送一批新的数据包之前,会先获取当前批次的起始序列号并将其附加给该批中的所有消息。如果由于网络错误等原因导致某些请求失败而进行了重新传输,则 Broker 可以通过比较收到的消息所携带的 Sequence Number 来判断这些消息是否已经被成功处理过:
- 如果 Broker 发现接收到具有相同 TopicPartition 和 SequenceNumber 的两条不同消息,则只保留第一次到达的那个版本;
- 对于那些已经存在于日志里但是其对应的 Acknowledgement 尚未返回给 Producers 的情况,Broker 也会利用 Sequence Numbers 进行去重操作;
此外,在配置上还需要设置合理的参数组合才能开启此功能,比如将 `enable.idempotence=true` 设置为 true 并调整其他相关属性如 `acks=all`, `retries>0` 等等。
```java
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
// Enable idempotent producer by setting this property to 'true'
props.put("enable.idempotence", "true");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
Producer<String, String> producer = new KafkaProducer<>(props);
```
阅读全文
相关推荐



















