Kafka代理似乎通过以下方式在分区级别跟踪消息来执行重复数据删除:
我正在阅读的所有内容都讨论了如何解决生产者或代理错误的问题,该错误会导致生产者重试发送。当生产者崩溃时该怎么办?生产者ID是我控制的静态ID,还是每次注册生产者节点时由代理重新分配的生产者ID?如果生产者ID被重新分配并且与重新启动之前的ID不同,那将是重复的,对吗?
我不明白为什么这是他们设计生产者ID的方式,但是我无法在PRODUCER_ID_CONFIG
中找到任何org.apache.kafka.clients.producer.ProducerConfig
,所以看起来是它的设计方式。
答案 0 :(得分:0)
在这种情况下有重复。我不确定为什么PID的设计是暂时的,而不是在会话之间持久存在,而是从implemented proposal:
即使生产者必须重试请求,这也可以确保 失败时,每条消息将仅在日志中保留一次。 此外,由于为生产者的每个新实例分配了新的实例, 唯一的PID,我们只能保证在 单一生产者会议。
编辑:看来此问题已由我提供的 的TransacitonalId解决。上面链接的同一文档中对此进行了详细说明。