【问题标题】:Kafka UNKNOWN_PRODUCER_ID exception卡夫卡 UNKNOWN_PRODUCER_ID 异常
【发布时间】:2018-12-04 18:56:38
【问题描述】:

我有时会在使用 kafka 流时发现 UNKNOWN_PRODUCER_ID 异常。

2018-06-25 10:31:38.329  WARN 1 --- [-1-1_0-producer] o.a.k.clients.producer.internals.Sender  : [Producer clientId=default-groupz-7bd94946-3bc0-4400-8e73-7126b9b9c0d4-StreamThread-1-1_0-producer, transactionalId=default-groupz-1_0] Got error produce response with correlation id 1996 on topic-partition default-groupz-mplat-five-minute-stat-urlCount-counts-store-changelog-0, retrying (2147483646 attempts left). Error: UNKNOWN_PRODUCER_ID

参考官方文档:

如果代理找不到 与相关 producerId 关联的生产者元数据。这 例如,如果生产者的记录被删除,则可能发生 因为他们的保留时间已经过去。一旦最后的记录 producerId 被删除,生产者的元数据从 代理,生产者的未来追加将返回此异常。

它说一种可能性是生产者空闲超过保留时间(默认为一周),因此生产者的元数据将从代理中删除。经纪人找不到生产者元数据还有其他原因吗?

【问题讨论】:

    标签: apache-kafka apache-kafka-streams


    【解决方案1】:

    您可能遇到https://issues.apache.org/jira/browse/KAFKA-7190。正如那张票上所说:

    当流应用程序的流量很少时,消费者清除可能会删除 甚至是生产者发送的最后一条消息(即,由生产者发送的所有消息) 该生产者已被消费并提交),因此,经纪人 将删除该生产者的 ID。下次当这个生产者试图 发送,它会得到这个 UNKNOWN_PRODUCER_ID 错误代码,但在这种情况下, 这个错误是可重试的:生产者只会得到一个新的生产者 ID 和 重试,然后这一次它会成功。

    https://cwiki.apache.org/confluence/display/KAFKA/KIP-360%3A+Improve+handling+of+unknown+producer也正在跟踪此问题

    【讨论】:

      【解决方案2】:

      两个原因可能会删除您制作人的元数据:

      1. 由于达到保留时间,日志段被删除。
      2. 生产者状态可能会由于不活动而过期,该设置由 transactional.id.expiration.ms 设置控制,默认为 7 天

      因此,如果您的 Kafka transactional.id.expiration.ms 来解决此问题 设置(至 24 天)直到 KIP-360 发布:

      log.retention.hours=720

      transactional.id.expiration.ms=2073600000

      这将保证对于低流量主题(消息写入时间很少超过 7 天),您的生产者的元数据状态将在代理的内存中保留更长的时间,从而降低出现 UnknownProducerIdException 的风险。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-23
        • 1970-01-01
        • 2019-04-12
        • 1970-01-01
        • 2018-09-15
        • 2014-10-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多