Производитель Kafka выдает «Получена неизвестная тема или ошибка раздела» при отправке в тему, созданную методом AdminClient createTopics. - PullRequest
0 голосов
/ 24 декабря 2018

У меня проблема с темами, созданными с использованием AdminClient createTopics.В моем приложении у меня есть следующая последовательность:

  1. создать новую тему с 1 разделом, коэффициент репликации установлен в 1, используя AdminClient.createTopics
  2. ожидание AdminClient.createTopics KafkaFuture результат
  3. немедленно отправить новое сообщение во вновь созданную тему (обычно время между операциями 2 и 3 составляет около 200 миллисекунд).

Мой код выглядит следующим образом:

adminClient
  .createTopics(Collections.singleton(new NewTopic(targetTopic, 1, (short) 1)))
  .values()
  .get(targetTopic)
  .get();
producer.send(new ProducerRecord<>(targetTopic, data));

Время от времени производитель не видит созданную тему и выдает следующее исключение:

[Producer clientId = provider-1] Ошибка при получении метаданных с идентификатором корреляции 5: {targetTopic = UNKNOWN_TOPIC_OR_PARTITION}

[Producer clientId = provider-1] Получена неизвестная тема или ошибка раздела в запросе на создание раздела targetTopic.Тема / раздел может не существовать или у пользователя может не быть доступа Описать к нему

Эта проблема очень редкая (<0,1% всех созданных тем). </p>

Это так?гарантируется, что когда AdminClient.createTopics будущее Кафки будет завершено, тема будет создана, и производитель Кафки должен увидеть эту тему?Если нет, то какой метод создания темы может дать мне такую ​​гарантию?

Я использую kafka-клиенты: 2.0.0 и службу Kafka HD на Azure.Мой кластер состоит из 3 узлов Zookeeper и 3 узлов Kafka.

1 Ответ

0 голосов
/ 24 декабря 2018

Клиент Kafka не гарантирует создание атомной темы.Вы можете прочитать это из этой документации .При создании темы kafka уведомит распределенные системы об информации о темах, чтобы действие выполнялось на разных машинах, и они не могут быть атомарными без распределенного управления транзакциями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...