Как производитель либрдкафки узнает о новых разделах темы в Кафке

Я запускаю rdkafka_simple_producer.c для создания сообщений в кластер Kafka. У меня одна тема и 30 разделов. Использование стандартного кругового разбиения. Пока продюсер работает и генерирует сообщения для Kafka, я добавляю больше разделов в Kafka

kafka/bin/kafka-topics.sh --alter --zookeeper server2:2181 --topic demotest --partitions 40

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

В тесте продюсер пробежал 2 минуты.

Нужно ли добавлять какой-либо вызов функции в simple_producer или это параметр Кафки, который мне нужно учитывать?

Заранее спасибо!

1 ответ

Решение

У меня наконец-то есть ответ на этот вопрос. На самом деле производитель периодически обновляется о метаданных. Интервал определяется параметром конфигурации topic.metadata.refresh.interval.ms

Значение topic.metadata.refresh.interval.ms по умолчанию равно 300000 (в мс). Это 5 минут, а тест длился всего 2 минуты. После обновления метаданных производитель автоматически распознает новые добавленные разделы.

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

rd_kafka_conf_set(conf, "topic.metadata.refresh.interval.ms", "15000",
                          errstr, sizeof(errstr)) != RD_KAFKA_CONF_OK)

Конечно, вы должны учитывать, что это подразумевает обмен сообщениями между брокером и производителем. Подробнее о конфигурации librdkafka: конфигурация librdkafka

Другие вопросы по тегам