Kafka 学习kafka 生产者幂等性

Posted 思想累积

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kafka 学习kafka 生产者幂等性相关的知识,希望对你有一定的参考价值。

简介

幂等性:执行多次操作与执行一次操作的影响一致

kafka 生产者幂等性

kafka 生产者生产消息到 partition
如果直接发送消息,kafka 会将消息保存到分区中,但 kafka 会返回一个ACK 给生产者,标识当前操作是否成功,是否已经保存了这条消息。
如果 ACK 响应失败,生产者会重试,继续发送未发送成功的消息,kafka 又会保存一条一模一样的问题

配置幂等性

props.put("enable.idempotence", true);

幂等性原理

kafka 有一个 Producer ID 和 Sequence Number 的概念

  • PID:每个生产者 Producer 在初始化时,会分配一个唯一的 PID,这个 PID 对用户来说是透明的
  • Sequence Number:针对每个生产者发送到指定主题分区的消息都对应一个开始递增的 Sequence Number

步骤:

  1. kafka 发送消息携带 PID 和 Sequence Number 发送
  2. kafka 收到消息,一并保存下来。
  3. ACK 响应失败后,生产者重试,再次发送消息,根据 pid、 Sequence Number 判断是否需要再保存一条消息
  4. 判断条件:生产者发送的 Sequence Number 是否小于等于 partition 中消息对应的 sequence Number
  5. 成功保存消息,当前发送的 sequence Number = 0,spid 对应的 sequence 不保存消息

以上是关于Kafka 学习kafka 生产者幂等性的主要内容,如果未能解决你的问题,请参考以下文章

Kafka幂等性原理及实现剖析

kakfa从入门到放弃: 相关概念,幂等性&事务

kakfa从入门到放弃: 相关概念,幂等性&事务

kakfa从入门到放弃: 相关概念,幂等性&事务

Kafka快速入门(生产者)同步异步发送分区消息精确一次发送幂等性事务

如何使两个DC之间的kafka集群中的生产者幂等?