Как производитель либрдкафки узнает о новых разделах темы в Кафке
Я запускаю 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