В моем приложении следующая последовательность:
- создать новую тему с 1 разделом и коэффициентом репликации, равным 1, с помощью AdminClient.createTopics
- подождитеKafkaFuture результат
Код: Выделить всё
AdminClient.createTopics
- немедленно отправить новое сообщение во вновь созданную тему (обычно время между операцией 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=producer-1] Ошибка при получении метаданных с идентификатором корреляции 5: {targetTopic=UNKNOWN_TOPIC_OR_PARTITION
[Producer clientId=producer-1] Получена неизвестная ошибка темы или раздела в запросе на производство раздела targetTopic. Возможно, тема/раздел не существует или у пользователя нет доступа к ней. Опишите
Эта проблема возникает очень редко (< 0,1 % всех созданных тем).
Гарантируется ли, что когда AdminClient.createTopics Kafka Future будет завершена, тема будет создана, и производитель Kafka должен увидеть эту тему?Если нет, то какой метод создания темы может дать мне такую гарантию?
Я использую kafka-clients:2.0.0 и службу Kafka HD в Azure. Мой кластер состоит из 3 узлов Zookeeper и 3 узлов Kafka.
Подробнее здесь: https://stackoverflow.com/questions/539 ... -sending-t