当Kafka生产者重新启动或失败时,幂等会发生什么?

时间:2019-05-09 21:01:17

标签: apache-kafka

Kafka代理似乎通过以下方式在分区级别跟踪消息来执行重复数据删除:

  1. 消息序列号
  2. 生产者ID

我正在阅读的所有内容都讨论了如何解决生产者或代理错误的问题,该错误会导致生产者重试发送。当生产者崩溃时该怎么办?生产者ID是我控制的静态ID,还是每次注册生产者节点时由代理重新分配的生产者ID?如果生产者ID被重新分配并且与重新启动之前的ID不同,那将是重复的,对吗?

我不明白为什么这是他们设计生产者ID的方式,但是我无法在PRODUCER_ID_CONFIG中找到任何org.apache.kafka.clients.producer.ProducerConfig,所以看起来是它的设计方式。

1 个答案:

答案 0 :(得分:0)

在这种情况下有重复。我不确定为什么PID的设计是暂时的,而不是在会话之间持久存在,而是从implemented proposal

  

即使生产者必须重试请求,这也可以确保   失败时,每条消息将仅在日志中保留一次。   此外,由于为生产者的每个新实例分配了新的实例,   唯一的PID,我们只能保证在   单一生产者会议。

编辑:看来此问题已由我提供的 的TransacitonalId解决。上面链接的同一文档中对此进行了详细说明。