Как сделать так, чтобы потребитель подстановочного знака Kafka в Java узнал о новой теме раньше? - PullRequest
0 голосов
/ 19 октября 2018

Мой проект реализует мультитенантность на уровне Kafka, используя отдельную тему для каждого клиента и группового потребителя, т. Е. Публикуйте в теме «message.tenant1» или «message.tenant99» и используйте из темы «message». * '

Это работает нормально, пока мы не хотим динамически добавить нового клиента, то есть добавить тему 'message.tenant100'.Потребитель с подстановочными символами не увидит новую тему, пока она не будет перезапущена.

Есть ли способ заставить пользователей с подстановочными символами видеть новые темы без перезапуска всего приложения?

Мы используем Spring, ноесли решение не доступно через Spring, тогда мы можем использовать что-то еще.

РЕДАКТИРОВАТЬ: Оказывается, это работает, но есть грубая, 5-минутная задержка, прежде чем происходит перебалансировка.5 минут, вероятно, будет слишком длинным для нас в производстве.Я попытался установить для параметра leader.imbalance.check.interval.seconds более низкое значение, но это, похоже, не оказало никакого влияния.

Как мне настроить или сказать Kafka о необходимости повторной балансировки раньше?Я ожидаю, что перебалансировка - это дорогостоящая операция, которую вы не хотите делать слишком часто.

1 Ответ

0 голосов
/ 19 октября 2018

Существует свойство потребителя, metadata.max.age.ms, которое может заставить потребителей обновлять свои метаданные.По умолчанию 300000 или 5 минут.Вы можете изменить это на каждые 30 секунд или около того, чтобы иметь более короткую задержку для распознавания новых тем.

Из официальных документов Kafka, под New Consumer Configs:

metadata.max.age.ms- Период времени в миллисекундах, после которого мы принудительно обновляем метаданные, даже если мы не видели каких-либо изменений в руководстве раздела, чтобы заранее обнаруживать каких-либо новых посредников или разделов.

https://kafka.apache.org/documentation/#newconsumerconfigs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...