Почему безголовый сервис должен использоваться для Kafka в Kubernetes, а не для Cluster IP с балансировкой нагрузки из коробки? - PullRequest
1 голос
/ 17 января 2020

Большинство примеров, с которыми я сталкиваюсь, чтобы использовать Kafka в Kubernetes, состоит в том, чтобы развернуть его как headless service, но я пока не могу получить ответ, почему он должен быть без головы, а не Cluster IP? На мой взгляд, кластер IP обеспечивает балансировку нагрузки, в которой мы гарантируем, что не только один из broker всегда загружается своими ресурсами, как я вижу с безголовыми клиентами Kafka, будь то sarma или java клиент всегда выбирает первый IP-адрес из DNS lookup и подключается к нему, не станет ли это узким местом, если около 100+ клиентов пытаются сделать то же самое и открыть соединение с первым IP-адресом? или Kafka уже обрабатывает этот встроенный файл, который я до сих пор пытаюсь понять, как это происходит на самом деле.

1 Ответ

4 голосов
/ 17 января 2020

Если нет различий между различными экземплярами служб (репликами модуля, обслуживающего приложение без состояния), вы можете предоставить их в рамках службы ClusterIP, так как подключение к любой реплике для обслуживания текущего запроса в порядке. Это не относится к сервисам с отслеживанием состояния (например, Kafka, базы данных и т. Д. c). Каждый экземпляр отвечает за свои данные. У каждого экземпляра может быть свой раздел / topi c et c. Экземпляры службы не являются точными «репликами». Решения для запуска таких сервисов с состоянием в Kubernetes обычно используют безголовые сервисы и / или наборы состояний, чтобы каждый экземпляр сервиса имел уникальную идентификацию. Такие приложения с состоянием обычно имеют свою собственную технологию кластеризации, которая опирается на каждый экземпляр в кластере, имеющий уникальную идентификацию.

Теперь, когда вы знаете, почему стабильные идентификаторы требуются для приложений с сохранением состояния и как наборы состояний с автономными службами обеспечивают стабильные идентификаторы, вы можете проверить, как ваши дистрибутивы Kafka могут использовать их для запуска Kafka в kubernetes.

В этой записи блога объясняется, как это делает стримзи:

Для StatefulSets - который Strimzi использует для запуска брокеров Kafka - вы можете использовать службу без головы Kubernetes дать каждому из модулей стабильное имя DNS. Strimzi использует эти DNS-имена в качестве рекламных адресов для брокеров Kafka. Так и со Strimzi:

  • Первоначальное соединение выполняется с использованием обычного сервиса Kubernetes для получения метаданных.

  • Последующие соединения открываются с использованием DNS-имен, присвоенных модулям другой безголовой службой Kubernetes.

...