Как проверить, работает ли повторная попытка 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 скорее выглядит как исключение без возможности повторного запуска.