Какие исключения распространяются на код клиентского приложения в Kafka API - PullRequest
0 голосов
/ 06 февраля 2019

Я использую Kafka Java API v2.1.Я хочу знать, какие исключения будут распространяться на код клиентского приложения из базового API

Это мой полученный код обратного вызова для отправки вызова:

        @Override
    public void onCompletion(RecordMetadata metadata, Exception e) {
        if (e == null) {
            if (LOG.isLoggable(Level.FINEST)) {
                LOG.finest("Sent message " + mySentRecord
                           + " with offset " + metadata.offset()
                           + " on topic:partition "
                           + metadata.topic() + ":" + metadata.partition());
            }
        }
        else {
            try {
                throw e;
            }
            catch (NotEnoughReplicasAfterAppendException |
                   NotEnoughReplicasException |
                   TimeoutException exception )
            {
                StringWriter outError = new StringWriter();
                e.printStackTrace(new PrintWriter(outError));
                LOG.warning(outError.toString());
            }
            catch (Exception exception) {
                throw new ApplicationDeath(exception);
            }
        }
    }

Здесь я ловлю NotEnoughReplicasAfterAppendException, NotEnoughReplicasException и TimeoutException, но я никогда не вижу ничего, кроме исключений тайм-аута, когда я убиваю брокеров в ISR.Я не вижу никаких исключений при отключении или недостаточно реплик-исключений.

Я знаю, что Kafka API будет повторять попытки внутренних подключений, но я хочу получать уведомления о таких попытках в коде приложения.Аналогично, я не вижу таких исключений в коде потребителя, кроме таймаутов метаданных.

Как я могу добиться этого и получать уведомления о любых разрывах соединения, недостаточном количестве реплик и т. Д.?Какие еще исключения я должен ловить и обрабатывать здесь?

Спасибо, Абхи

1 Ответ

0 голосов
/ 08 февраля 2019

Во-первых, никогда throw e и поймай его.

Вместо этого отметьте if (e instanceof ExceptionClass)


Все они перечислены в JavaDoc

Переформатировано здесь для возможности чтения.

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

  • InvalidTopicException
  • OffsetMetadataTooLargeException
  • RecordBatchTooLargeException
  • RecordTooLargeException
  • UnknownServerException

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

  • CorruptRecordException
  • InvalidMetadataException
  • NotEnoughReplicasAfterAppendException
  • NotEnoughReplicasException
  • OffsetOutOfRangeException
  • TimeoutException
  • НеизвестноTopicOrPartitionException
...