1 个回答
server端幂等性接收流程:
1、检查是否有 PID 信息,没有的话走正常的写入流程
2、先根据 batch 的 sequence number 信息检查这个 batch 是否重复(server 端会缓存 PID 对应这个 Topic-Partition 的最近5个 batch 信息)。如果有重复,这里当做写入成功返回。
3、有了 PID 信息,并且不是重复 batch 时。检查该 PID 是否已经缓存中存在。
4、如果不存在,那么判断 sequence number 是否 从0 开始,是的话,在缓存中记录 PID 的 meta,并执行写入操作,否则返回 UnknownProducerIdException。
5、如果该 PID 在缓存中存在,先检查 PID epoch 与 server 端记录的是否相同;如果不同并且 sequence number 不从 0 开始,那么返回 OutOfOrderSequenceException 异常;如果不同并且 sequence number 从 0 开始,那么正常写入;如果相同,那么根据缓存中记录的最近一次 sequence number(currentLastSeq)检查是否为连续,不连续的情况下返回 OutOfOrderSequenceException 异常。
发布于:3个月前 (01-24) IP属地:四川省
我来回答
您需要 登录 后回答此问题!