1 个回答
kafka producer的幂等性之pid:
1、每个producer再初始化时都会被分配一个pid,pid是全局唯一的。producer故障重启后会被重新分配一个pid,这也是幂等性无法做到跨会话的原因之一
2、producer的pid需要向sever端进行申请,而server端需要向zookeeper申请
3、zk有一个/last_producer_id_block节点,每个brock向zk申请一个pid段后,都会把自己申请的pid段信息写入到这个节点
4、当其他broker再申请pid段时,会首先读写这个节点的信息,然后根据block_end选择一个pid段,最后再把信息写回到zk的这个节点,broker向producer返回自己保存的pid,如果pid用尽时,向zk申请一个新的pid段
kafka producer的幂等性之sequence number:1、对于一个给定的pid,sequence number将会从0开始自增,每个topic-partition都会有一个独立的sequence number。
2、有了pid之后,再pid+topic-partition级别上再添加一个sequence number信息,就可以实现Producer的幂等性了
3、Producer会保存一个topic-partition的last sequence number,再发送消息之前,会再消息的meta中添加此条信息的sequence number
发布于:4个月前 (01-24) IP属地:四川省
我来回答
您需要 登录 后回答此问题!