幂等性idempotency

就是用户对于【同一操作】发起的【一次请求或者多次请求】的【结果是一致的】,不会因为多次点击而产生了副作用。

更为详细的友人有详细介绍。本文只为自己做记录

https://www.cnblogs.com/geyifan/p/6128425.html

### Kafka 中幂等性的实现原理 Kafka 的幂等性设计是为了确保生产者发送的消息能够被精确一次地传递到目标分区,即使在网络异常或其他错误情况下也不会重复写入消息。这一功能的核心依赖于 **Producer ID (PID)** 和每条消息的序列号机制。 #### Producer ID (PID) 及其作用 当一个生产者启动时,它会从 Broker 获取唯一的 PID[^3]。这个 PID 被绑定到特定的生产者实例上,在整个生命周期内保持不变。每次生产者向某个主题分区发送消息时,都会附带该 PID 以及一条递增的序列号(Sequence Number)。Broker 收到消息后,利用 PID 和 Sequence Number 来判断当前消息是否已经被成功提交并存储。 如果由于网络中断等原因导致客户端重试,则新的请求可能携带相同的 PID 和 Sequence Number 组合;此时 broker 将识别此情况并将后续相同编号的数据丢弃而不重新记录下来[^1]。 #### 配置参数支持 为了启用这种幂等功能,用户可以在创建 `KafkaProducer` 对象时设置如下几个重要配置项: - `enable.idempotence=true`: 开启幂等性保障,默认关闭。 - `acks=all`: 确保所有的 ISR 副本都已同步完成之后才返回确认给 producer ,这是实现幂等的基础条件之一。 - `max.in.flight.requests.per.connection=5`: 控制单个连接上的未完成请求数量上限为最多五个批次。减少并发度可以降低因乱序引发的问题风险。 以下是开启幂等性的简单代码示例: ```java Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); // Enable idempotency props.put("enable.idempotence", "true"); props.put("acks", "all"); props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); KafkaProducer<String, String> producer = new KafkaProducer<>(props); ``` ### 使用场景与注意事项 尽管 Kafka 提供了上述强大的工具来帮助开发者构建可靠的应用程序,但在实际应用过程中仍需注意一些事项: 1. 功效仅限于单一的主题分区内有效; 2. 如果需要跨多个分区或者不同主题之间维持一致性水平更高的话,则还需要借助事务 API 或其他补偿措施共同协作达成目的[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道格拉斯范朋克

播种花生牛奶自留田

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值