Как производитель либрдкафки узнает о новых разделах темы в Кафке - PullRequest
0 голосов
/ 06 февраля 2019

Я использую 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 Ответ

0 голосов
/ 06 февраля 2019

У меня наконец-то есть ответ на этот вопрос.На самом деле производитель периодически обновляется о метаданных.Интервал определяется параметром конфигурации 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

...