Решение проблем при работе с Kafka¶
При использовании Kafka проблемы могут возникнуть как на этапе подключения к брокеру, так и во время работы с данными. В статье рассматриваются распространенные ошибки и приводятся способы их устранения.
Чтобы облегчить решение возникших проблем
используйте приложение Offset Explorer и логи TDG;
попробуйте воспроизвести ошибки в тестовом режиме.
Обратитесь к разделу Инструменты для проверки ошибок, чтобы узнать больше.
Статья включает в себя следующие ошибки:
Проблема |
Пример сообщения об ошибке |
---|---|
|
|
|
|
|
Инструменты для проверки ошибок¶
Offset Explorer¶
Перед началом работы установите приложение Kafka Offset Explorer. В приложении можно просматривать данные кластеров – топики, брокеры, объекты и сообщения в топиках. Offset Explorer позволяет проверить соединение с кластером Apache Kafka, так что при подозрении на ошибку попробуйте подключиться к Kafka с его помощью. Если подключиться не удается, убедитесь, что конфигурация Kafka корректна.
Установив приложение, следуйте инструкции по подключению к
Kafka.
При добавлении кластера в Offset Explorer не забудьте заполнить поле Bootstrap servers во вкладке Advanced
.
Подключиться без этой настройки будет невозможно.
В поле Bootstrap servers укажите номер порта, который используется для соединения.
Данные для подключения должны соответствовать подключению в сервисе.
Логи TDG¶
При проверке конфигурации Kafka также могут быть полезны логи TDG. При подключении к Kafka в логах TDG выводятся:
input-параметры, с которыми был создан consumer Kafka;
output-параметры, с которыми был создан producer Kafka.
В логах указаны значения для всех опций библиотеки librdkafka
, в том числе выставленные по умолчанию.
Отключить вывод логов нельзя.
Пример вывода для consumer:
tdg2 | 2023-03-02 16:17:19.810 [1] main/304/main I> [dcb31ae4-ca99-4b1c-995f-a0dd05194fa9] Kafka consumer for "kafka" input configuration: ---
tdg2 | ssl.engine.id: dynamic
tdg2 | socket.blocking.max.ms: '1000'
tdg2 | message.max.bytes: '1000000'
tdg2 | connections.max.idle.ms: '0'
tdg2 | enable_sasl_queue: 'false'
tdg2 | batch.size: '1000000'
...
Воспроизведение ошибок¶
Если вы хотите воспроизвести в тестовом режиме ошибки из статьи, обратитесь к репозиторию с примером настройки подключения к Kafka. В примере с помощью Docker Compose развернуты три контейнера, которые нужны для минимальной настройки:
TDG;
брокер (сервер) Kafka.
Чтобы развернуть контейнеры и воспроизвести ошибки, скачайте пример и после распаковки архива следуйте инструкции из файла 6_Quickstart_guide_TDG.md.
Возможные ошибки¶
Неверно указан брокер¶
Пример вывода
Failed to resolve 'kafka-broker:9091': Name or service not known
Возможные причины
В файле конфигурации config.yml
неверно указаны номер порта для брокера Kafka или название Docker-контейнера.
Решение
Проверьте адрес брокера (параметр brokers
) в секции connector
в файле конфигурации config.yml
.
Сравните это значение с параметрами брокера Kafka.
Например, если брокер Kafka запущен с помощью Docker Compose, проверьте параметры брокера ports
и container_name
в файле конфигурации Docker-контейнеров (docker-compose.yml
).
Неизвестный топик или раздел¶
Пример вывода
kafka_error: consumer "kafka": Broker: Unknown topic or partition
Возможные причины
Запрос на запись был отправлен в несуществующий топик или раздел. Ошибка возникает, если на момент отправки данных на брокер указанный топик еще не был создан, и в Kafka отключено автоматическое создание топиков.
Решение
Убедитесь, что указанный топик существует. Если топика еще не существует, попробуйте создать его в Offset Explorer. Если при создании топика возникли проблемы, обратитесь к администратору Kafka.
Проверьте, что в настройках Kafka разрешено автоматическое создание топиков при отправке данных – по умолчанию такое поведение отключено. Если создание топиков разрешено, в Offset Explorer новый топик появится после обновления в папке
Topics
. При этом данные о новой записи не будут потеряны – запись будет добавлена в топик. При последующей отправке данных в этот топик ошибка возникать не будет.
Неверно заданы SSL-сертификаты¶
Пример вывода
ip:port/bootstrap: Disconnected while requesting ApiVersion: might be caused by incorrect security.protocol configuration (connecting to a SSL listener?) or broker version is < 0.10 (see api.version.request) (after 2ms in state APIVERSION_QUERY, 3 identical error(s) suppressed)
Возможные причины
Сертификат SSL настроен некорректно.
Версия брокера Kafka ниже
0.10
.
Решение
Если соединение недоступно, запустите приложение Offset Explorer и попытайтесь подключиться к Kafka. Если подключиться с помощью Offset Explorer не удалось, проверьте, что параметры брокера Kafka настроены корректно.
Проверьте значение параметра security.protocol в секции коннектора
input
(разделoptions
) в файле конфигурацииconfig.yml
.