Как подключиться к Kafka в Kubernetes извне?

Задача состоит в том, чтобы создать производителя Kafka, который подключается к кластеру Kafka, который находится в кластере Kubernetes, извне этого кластера. У нас есть несколько баз данных РСУБД, которые размещаются в помещении, и мы хотим передавать данные напрямую в Kafka, который находится в Kubernetes на AWS. Мы попробовали несколько вещей и развернули платформу с открытым исходным кодом Confluent, но пока ничего не помогло. Есть ли у кого-нибудь внятный ответ на эту проблему?


person Dimitris    schedule 22.10.2018    source источник
comment
Что именно вы пробовали? Вы проверили Kafka Connect?   -  person Giorgos Myrianthous    schedule 22.10.2018
comment
Да, я посмотрел на Kafka Connect, но предпочел бы создавать производителей, которые подключаются напрямую к кластеру.   -  person Dimitris    schedule 22.10.2018
comment
В общем, вам нужен Ingress Load Balancer / Proxy Controller, чтобы любой клиент мог подключаться извне.   -  person OneCricketeer    schedule 22.10.2018
comment
Kafka Connect является продюсером   -  person OneCricketeer    schedule 22.10.2018
comment
В кластере Kafka есть 3 брокера. Мы создали по 3 LB на AWS для каждого из этих брокеров. К сожалению, это вообще не работает.   -  person Dimitris    schedule 22.10.2018
comment
Kafka Connect имеет определенные доступные разъемы и не поддерживает все, что нам нужно. Вдобавок к этому мы хотим иметь детальный контроль над каждым производителем и добавить туда множество функций мониторинга, ведения журнала и восстановления.   -  person Dimitris    schedule 22.10.2018
comment
@Dimitris Kafka Connect создает собственные логи для конкретных задач, которые довольно подробны. Мониторинг также можно осуществлять через интерфейс REST Kafka Connect (docs.confluent.io/current /connect/references/restapi.html). KC также обеспечивает масштабируемость и параллелизм (см. Задачи коннектора). ИМО, если вы хотите создать своих собственных продюсеров, вы потратите много времени, чтобы заново изобрести колесо. Какие исходные базы данных у вас есть?   -  person Giorgos Myrianthous    schedule 22.10.2018
comment
Источник и приемник Oracle, MySQL, PostgreSQL и MongoDB. Использует ли Kafka Connect REST для передачи данных?   -  person Dimitris    schedule 22.10.2018
comment
Эта статья должна дать четкое объяснение того, как работает KC: linkedin.com/pulse/. Вам также нужно фиксировать изменения в исходных базах данных? В таком случае вам может понадобиться сторонний инструмент CDC (например, для Oracle вам понадобится Oracle GoldenGate или Attunity Replicate).   -  person Giorgos Myrianthous    schedule 22.10.2018
comment
К сожалению, большая часть наших данных находится в базах данных Oracle, поэтому мы искали что-то более простое по сравнению с Connect. Мы изучили GoldenGate, но это кажется слишком сложным в настройке.   -  person Dimitris    schedule 22.10.2018
comment
Поскольку лицензирование не является проблемой, вы можете выбрать Attunity Replicate. Конфигурация не такая сложная, а пользовательский интерфейс довольно дружелюбен.   -  person Giorgos Myrianthous    schedule 22.10.2018


Ответы (2)


Возможно, вам стоит взглянуть на развертывание Kafka Connect внутри Kubernetes. Поскольку вы хотите реплицировать данные из различных баз данных RDMBS, вам необходимо настроить исходные соединители,

Исходный соединитель принимает целые базы данных и передает обновления таблиц в темы Kafka. Он также может собирать метрики со всех ваших серверов приложений в темы Kafka, делая данные доступными для потоковой обработки с низкой задержкой.

В зависимости от исходных баз данных вам потребуется настроить соответствующие коннекторы.

Если вы не знакомы с Kafka Connect, в этой статье может быть весьма полезным, поскольку объясняет ключевые концепции.

person Giorgos Myrianthous    schedule 22.10.2018
comment
Как и в моем предыдущем ответе, у нас очень специфические рабочие нагрузки, и нам нужно подключаться напрямую к кластеру. Мы не хотим использовать REST Proxy или что-то в этом роде, просто производим данные напрямую в темы Kafka. - person Dimitris; 22.10.2018

Клиенты Kafka должны подключаться к определенному узлу для создания или использования сообщений.

Протокол kafka может подключаться к любому узлу для получения метаданных. Затем клиент подключается к определенному узлу, который был выбран лидером раздела, который клиент хочет производить / потреблять.

Каждый модуль kafka должен быть доступен индивидуально, поэтому вам понадобится балансировщик нагрузки L4 для каждого модуля. Рекламируемая конфигурация слушателя может быть установлена ​​в конфигурации kafka, чтобы объявлять разные IP / имена хоста для внутренних и внешних клиентов. Настройте ADVERTISED_LISTENERS EXTERNAL для использования балансировщика нагрузки и INTERNAL для использования IP-адреса модуля. Порты должны быть разными для внутренних и внешних.

Оформить заказ https://strimzi.io/, https://bitnami.com/stack/kafka, https://github.com/confluentinc/cp-helm-charts

Обновлять:

Пробовал установить kafka в k8s, работающем в AWS EC2. Между confluent-operator, bitnami-kafka и strimzi только strimzi настроил ВНЕШНИЙ в настройках kafka для балансировщика нагрузки.

bitnami-kafka использовал безголовый сервис, который бесполезен за пределами сети k8s. Confluent-operator настраивается на IP-адрес узла, что делает его доступным за пределами k8s, но для тех, кто может подключиться к экземпляру EC2 через частный IP-адрес.

person JVS    schedule 13.02.2019