Как проверить, работает ли повторная попытка Ruby-Kafka?

В документации упоминается, что производитель пытается отправить сообщение в очередь на основе max_retries.

Поэтому я выключил Kafka и попробовал своего продюсера. Я получаю эту ошибку

Fetching cluster metadata from kafka://localhost:9092
[topic_metadata] Opening connection to localhost:9092 with client id MYCLIENTID
ERROR -- : [topic_metadata] Failed to connect to localhost:9092: Connection refused
DEBUG -- : Closing socket to localhost:9092
ERROR -- : Failed to fetch metadata from kafka://localhost:9092
Completed 500 Internal Server Error in 486ms (ActiveRecord: 33.9ms)

что имеет смысл, однако retriesпосле этого никогда не бывает. Я прочитал документ наизнанку и не могу понять, как этоretries на самом деле сработает?

Вот мой код:

 def self.deliver_message(kafka, message, topic, transactional_id)
      producer = kafka.producer(idempotent: true,
                                transactional_id: transactional_id,
                                required_acks: :all,
                                max_retries: 5,
                                retry_backoff: 5)
      producer.produce(message, topic: topic)
      producer.deliver_messages
    end

ссылка на документ:

https://www.rubydoc.info/gems/ruby-kafka/Kafka/Producer

Заранее спасибо.

1 ответ

Решение

Повторные попытки основаны на типе исключения, созданном обратным вызовом производителя. Согласно Документам обратного вызова, во время обратного вызова может произойти следующее исключение:

Исключение, возникшее во время обработки этой записи. Нулевой, если ошибок не было. Возможные выброшенные исключения включают:

Исключения без возможности восстановления (фатальные, сообщение никогда не будет отправлено):

  • InvalidTopicException
  • OffsetMetadataTooLargeException
  • RecordBatchTooLargeException
  • RecordTooLargeException
  • UnknownServerException

Повторяемые исключения (временные, могут быть покрыты увеличением #.retries):

  • CorruptRecordException
  • InchvalidMetadataException
  • NotEnoughReplicasAfterAppendException
  • NotEnoughReplicasException
  • OffsetOutOfRangeException
  • TimeoutException
  • UnknownTopicOrPartitionException

Полное завершение работы Kafka скорее выглядит как исключение без возможности повторного запуска.

Другие вопросы по тегам