Решение проблем при работе с Kafka
При использовании Kafka проблемы могут возникнуть как на этапе подключения к брокеру, так и во время работы с данными. В статье рассматриваются распространенные ошибки и приводятся способы их устранения.
Чтобы облегчить решение возникших проблем
- используйте приложение Offset Explorer и логи TDG;
- попробуйте воспроизвести ошибки в тестовом режиме.
Обратитесь к разделу Инструменты для проверки ошибок, чтобы узнать больше.
Статья включает в себя следующие ошибки:
Проблема | Пример сообщения об ошибке | Неверно указан брокер | |
|---|---|
Неизвестный топик или раздел | | Неверно заданы SSL-сертификаты | |
Перед началом работы установите приложение Kafka Offset Explorer. В приложении можно просматривать данные кластеров - топики, брокеры, объекты и сообщения в топиках. Offset Explorer позволяет проверить соединение с кластером Apache Kafka, так что при подозрении на ошибку попробуйте подключиться к Kafka с его помощью. Если подключиться не удается, убедитесь, что конфигурация Kafka корректна.
Установив приложение, следуйте
инструкции по
подключению к Kafka. При добавлении кластера в Offset Explorer не
забудьте заполнить поле Bootstrap servers во вкладке Advanced. Подключиться без этой настройки
будет невозможно. В поле Bootstrap servers укажите номер порта, который используется для
соединения. Данные для подключения должны соответствовать подключению в
сервисе.
При проверке конфигурации 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: dynamictdg2 | 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;
- Zookeeper;
- брокер (сервер) 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. При этом данные о новой записи не будут потеряны - запись будет добавлена в топик. При последующей отправке данных в этот топик ошибка возникать не будет.
Пример вывода
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.