#apache-kafka #spring-kafka
#apache-kafka
Вопрос:
Недавно я написал приложение, которое подключается к запущенному экземпляру Kafka и создает несколько тем по требованию через конечную точку rest в цикле. Я регистрирую каждый вызов «создать тему», и он, как правило, выполняется очень быстро (например, 100 мс для делегирования создания 10 тыс. тем). Затем начинается обработка на стороне Kafka, длится несколько десятков секунд и внезапно останавливается без каких-либо ошибок. Список каталогов данных показывает, что Kafka создал около 2,5 тыс. каталогов, в то время как делегирование было для 10 тыс. Следующий вызов конечной точки также создает аналогичное количество тем.
Увеличение числа экземпляров Kafka не приводит к изменению результатов (кроме того, переключение на Kafka без zookeeper дает те же результаты). Что я делаю не так? Это ограничение ОС при создании каталогов (системный журнал пустой)?
Да, я знаю, что Kafka не создан для обработки многих тем, но, насколько я знаю, он должен обрабатывать не менее 100 тыс. ~ (и более нескольких миллионов с использованием KRaft без использования zookeeper).
Моя настройка:
- kafka-клиенты 3.0.0, встроенные в приложение springboot, выполняются через AdminClient.createTopics
- docker-создание с помощью Kafka и Zookeeper:
version: '3.5'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka-1:
image: wurstmeister/kafka
ports:
- "9092:9092"
environment:
DOCKER_API_VERSION: 1.22
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
Я делаю это довольно глупо:
for (int i = 0; i < 10_000; i ) {
adminClient.createTopics(List.of(new NewTopic(UUID.randomUUID().toString(), 1, (short) 1)));
}
Когда я сначала создаю коллекцию, а затем делегирую создание, она завершается успешно, но все же — что, если я буду делать это запись за записью, конечная точка за конечной точкой?
Комментарии:
1. Поскольку вы запускаете kafka в Docker, мне интересно, задаете ли вы максимальное количество открытых файловых дескрипторов на виртуальной машине / компьютере, поскольку они максимально распределены между контейнерами и хостом Linux.
2. Вам нужно проверить результаты
createTopics
—creatTopics(...).all().get(...)
.
Ответ №1:
Ну, есть ограничения, зависящие от ваших настроек — количество брокеров / зоопарков, конфигурация, аппаратное обеспечение и операционная система. Для ограничения ОС см. https://kafka.apache.org/documentation/#os .
Вы могли видеть из этого сообщения в блоге apache-kafka-supports-200k-partitions-per-cluster, как они настраивают кластер для поддержки тематических разделов 200k.
В то время (Kafka 1.1.0), вот что они рекомендовали
мы рекомендуем каждому брокеру иметь до 4000 разделов, а каждому кластеру — до 200 000 разделов.
Но для Kafka 2.8.0 из the Kafka The Definitive Guide 2nd Edition
В настоящее время в хорошо настроенной среде рекомендуется иметь не более 14 000 разделов на брокера и 1 миллион реплик на кластер.
Хотя, из вашего комментария
Я регистрирую каждый вызов «создать тему», и он, как правило, выполняется очень быстро (например, 100 мс для делегирования создания 10 тыс. тем).
Я не думаю, что Кафка на самом деле создает 10 тысяч тем в течение 100 мс. Из того, что я обнаружил в своем эксперименте (конечно, я пытаюсь настроить кластер для обработки более 100 тыс. разделов), я создаю свой собственный клиент-производитель на C , используя librdkaf. Производитель основан на асинхронности. Я мог бы легко отправить сообщение в еще не существующие темы 10K, чтобы принудительно создать тему. Но на самом деле потребуется некоторое время, чтобы получить успешное подтверждение от брокера. И чем больше сетевых разделов в кластере, тем больше времени вам, возможно, придется ждать успешного подтверждения.
Я бы рекомендовал вам оснастить свой кластер Kafka инструментом мониторинга, чтобы вы могли видеть работоспособность вашей установки в режиме реального времени (если ваш кластер не слишком занят).
Комментарии:
1. Спасибо, я рассмотрю эти ограничения ОС. Вы напомнили мне, что в Kafka нет необходимости явно создавать темы (с включенным автоматическим созданием), что является потрясающим в моем тестовом примере. С этим «10 тысяч тем за 100 мс» я знаю, что это просто время делегирования команд. Каталог листинга показывает, что Kafka физически создает темы намного медленнее.