Kafka UNKNOWN_PRODUCER_ID исключение

Иногда я нахожу UNKNOWN_PRODUCER_ID исключение при использовании потоков kafka.

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

Ссылается на официальные документы:

Это исключение создается брокером, если он не может найти метаданные производителя, связанные с рассматриваемым производителемId. Это могло произойти, если, например, записи производителя были удалены из-за истечения срока их хранения. После удаления последних записей производителяId метаданные производителя удаляются из брокера, и будущие добавления производителя будут возвращать это исключение.

В нем говорится, что одна из возможностей заключается в том, что производитель простаивает больше времени хранения (по умолчанию - неделя), поэтому метаданные производителя будут удалены из брокера. Есть ли другие причины, по которым брокеры не могут найти метаданные производителя?


person ccshih    schedule 26.06.2018    source источник


Ответы (2)


Возможно, вы столкнулись с проблемой https://issues.apache.org/jira/browse/KAFKA-7190. Как сказано в этом билете:

Когда у потокового приложения мало трафика, возможно, что очистка потребителя удалит даже последнее сообщение, отправленное производителем (т. Е. Все сообщения, отправленные этим производителем, были потреблены и зафиксированы), и в результате брокер будет удалите идентификатор этого производителя. В следующий раз, когда этот производитель попытается отправить, он получит этот код ошибки UNKNOWN_PRODUCER_ID, но в этом случае эту ошибку можно повторить: производитель просто получит новый идентификатор производителя и попытается повторить попытку, а затем на этот раз все будет успешным.

Эта проблема также отслеживается на https://cwiki.apache.org/confluence/display/KAFKA/KIP-360%3A+Improve+handling+of+unknown+producer

person Dmitry Minkovsky    schedule 20.12.2018

Метаданные вашего производителя могут быть удалены по двум причинам:

  1. Сегменты журнала удаляются из-за истечения срока хранения.
  2. Состояние производителя может истечь из-за бездействия, которое контролируется настройкой transactional.id.expiration.ms, которая по умолчанию составляет 7 дней.

Так что, если у вас Kafka ‹2,4, вы можете обойти это, увеличив время хранения (учитывая, что ваша система позволяет это) журнала вашей темы (например, 30 дней) и увеличив transactional.id.expiration.ms установка (до 24 дней) до Выпущен KIP-360:

log.retention.hours = 720

transactional.id.expiration.ms = 2073600000

Это гарантирует, что для тем с низким трафиком (сообщения, которые пишутся редко, чем 7 дней), состояние метаданных вашего производителя будет храниться в памяти брокера в течение более длительного периода, что снижает риск получения исключения UnknownProducerIdException.

person Cristian Balint    schedule 09.01.2020