Кафка балансировки нагрузки между несколькими арендаторами - PullRequest
1 голос
/ 01 мая 2019

Я рассматриваю Kafka как одну из нескольких технологий, служащих в качестве посредника сообщений для рабочих узлов, которые в конечном итоге будут отправлять push-уведомления пользователям.Важным ограничением является то, что я не хочу, чтобы один арендатор монополизировал ресурсы таким образом, чтобы он вставлял миллион уведомительных сообщений и не позволял другим арендаторам получать свои уведомления в разумные сроки.Другими словами, я хочу, чтобы каждый арендатор обрабатывал свои сообщения примерно с одинаковой скоростью.Кажется, я могу создать тему для каждого арендатора или раздел для каждого арендатора.И то, и другое кажется проблематичным и / или осуждаемым.

Создание темы для каждого арендатора похоже на логистический кошмар.Каждый раз, когда новый клиент добавляется в приложение, потребители должны будут получать уведомления о подписке на эту тему.

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

Какой мой лучший вариант?Есть ли третья возможность, которую я не рассматриваю?Разве Кафка не подходит для работы?

Спасибо!

1 Ответ

1 голос
/ 02 мая 2019

Если вы разрешите нескольким «арендаторам» совместно использовать раздел, то ваш страх перед тем, как один из арендаторов захватит раздел, может сбыться.В этом случае у вас может не быть другого выбора, кроме как создать тему для каждого арендатора.Как вы можете обратиться к администрации?

  • Вы можете установить auto.create.topics.enable на true, чтобы арендатор мог создать тему, просто отправив ей сообщение.
  • Регистрация создавалась динамическиТемы для потребителей не сложны, если названия ваших тем следуют шаблону.Ваши потребители должны подписаться на темы, которые соответствуют заданному шаблону .
public void subscribe(java.util.regex.Pattern pattern)
Subscribe to all topics matching specified pattern to get dynamically assigned 
partitions. The pattern matching will be done periodically against topics 
existing at the time of check.

Как быстро потребители могут обнаруживать новые темы, настраивается с помощью metadata.max.age.ms(по умолчанию 5 минут)

Если вы собираетесь создавать тысячи тем, вы можете проверить производительность, хотя ( см. )

...