Kafka报kafka.common.errors.UnknownProducerIdException,咨询问题原因
Kafka UnknownProducerIdException 异常原因解析
对应异常日志翻译结果:
[2021-02-07 09:38:47,927] ERROR [副本管理器 broker=1] 处理分区 *Topicname*-1 的追加操作失败(kafka.server.ReplicaManager) org.apache.kafka.common.errors.UnknownProducerIdException:broker 上不存在 producerId=68444 的对应记录,该 producerId 关联的最后一批消息可能已因达到保留阈值被清理。
具体触发原因
- producerId 是 Kafka 幂等、事务生产者的专属标识:broker 会持久化每个 producerId 的元数据(包含序列号、事务状态等),用于实现幂等写入去重、事务状态管理。
- 最常见的触发场景为消息保留周期配置过短:当某个 producerId 对应的所有历史消息都被日志清理策略删除后,broker 会同步清除该 producerId 的元数据。如果此时生产者仍使用旧的 producerId 发起写入请求,broker 无法识别该标识,就会抛出当前异常。
- 其他触发场景包括:
- 生产者空闲时长超过 broker 端的 producerId 元数据过期阈值(对应配置为
transaction.abort.timed.out.transaction.cleanup.interval.ms或幂等场景的producer.id.expiration.ms),被 broker 主动清理元数据 - broker 重启时未持久化的 producerId 元数据丢失,通常伴随 unclean leader 选举、异常宕机等场景
- 生产者进程未正常刷新缓存,仍在使用已被 broker 清理的旧 producerId 发起写入
- 生产者空闲时长超过 broker 端的 producerId 元数据过期阈值(对应配置为
补充说明
- 该异常仅会在开启幂等或事务的生产者场景下触发,普通无幂等的生产者无 producerId 概念,不会出现该异常。
- 正常情况下生产者捕获该异常后会自动申请新的 producerId 并重试写入,不会直接导致业务失败;如果持续报错,需检查 broker 端的消息保留时长、生产者空闲超时配置是否合理。
内容的提问来源于stack exchange,提问作者Naveen k
相关产品推荐
相关产品推荐

