Работает ли Kafka с балансировщиками нагрузки, использующими обратные прокси?

#apache-kafka #load-balancing

#apache-kafka #балансировка нагрузки

Вопрос:

Недавно я нашел несколько статей / проектов, использующих обратные прокси-балансировщики нагрузки перед Kafka (ie. https://github.com/banzaicloud/kafka-operator ).

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

Итак, в чем смысл этих прокси и балансировщиков нагрузки перед Kafka?

Ответ №1:

Вы не ошибаетесь! Все, что вы упомянули там, верно.

Если мы говорим о «классическом» балансировщике нагрузки, вам необходимо выполнить следующие 2 условия, чтобы использовать его с Kafka:

  1. Балансировщики нагрузки находятся на уровне TCP (нельзя использовать балансировщики нагрузки L6 или L7 с Kafka)
  2. Один балансировщик нагрузки на брокера Kafka (как вы уже упоминали, клиенты подключаются напрямую к брокеру, с которым у них есть бизнес)

Статьи, которые вы упоминаете, вероятно, каким-то образом связаны с Envoy Kafka Filter (включая Banzai ).

Я не знаю внутренних деталей, но думаю, что могу сделать краткое изложение. Основной проблемой динамической маршрутизации является протокол Kafka, который является протоколом уровня TCP. Итак, у нас нет доступа к метаданным, как у нас было бы в случае протокола более высокого уровня (например, HTTP ), чтобы мы могли правильно маршрутизировать связь.

Envoy разработал фильтр Kafka, который позволяет именно это. Когда клиент подключается к прокси-серверу, прокси-сервер может декодировать протокол Kafka и знает: «Хорошо, итак, вы хотите подключиться к x broker, позвольте мне сделать это за вас».