В этой статье описывается, как разрабатывать микросервисы с Кварками , которые используют Apache Kafka , работающие в кластере Kubernetes.
Quarks поддерживает Микропрофильный реактивный обмен сообщениями для взаимодействия с Apache Kafka. Существует хорошее руководство Использование Apache Kafka с реактивными сообщениями , в котором объясняется, как отправлять и получать сообщения Кафке и от Кафки.
Руководство содержит инструкции по локальному запуску Kafka через Docker с помощью docker-compose. Хотя это, вероятно, самый простой способ начать работу, следующим шагом для разработчиков микросервисов часто является выяснение того, как получить доступ к Apache Kafka в средах Kubernetes или размещенных службах Kafka.
Вариант 1: Apache Kafka, работающий в Kubernetes
Проект с открытым исходным кодом Strimzi предоставляет изображения контейнеров и операторы для запуска Apache Kafka на Kubernetes и Red Hat OpenShift. Существует хорошая серия блогов о разработчике Red Hat, в которой описывается, как использовать Strimzi. Для доступа к нему из приложений существует несколько различных вариантов, например порты узлов, маршруты OpenShift, балансировщики нагрузки и вход.
Иногда эти возможности могут оказаться непосильными для разработчиков, особенно когда все, что вам нужно, – это простая среда разработки для написания некоторых реактивных приложений hello world, чтобы начать работу. В моем случае я хотел установить простой сервер Kafka в своем кластере Mini kube.
Существует краткое руководство по развертыванию Strimzi в мини-кубе. К сожалению, в нем не объясняется, как получить к нему доступ из приложений. Вторая часть серии блогов Доступ к Apache Kafka в Strimzi: Часть 2 – Порты узлов объясняет это.
На основе этих двух статей я написал простой скрипт, который развертывает Kafka в Mini cube менее чем за 5 минут. Сценарий является частью проекта cloud-native-starter . Выполните эти команды, чтобы попробовать:
$ git clone https://github.com/IBM/cloud-native-starter.git $ cd cloud-native-starter/reactive $ sh scripts/start-minikube.sh $ sh scripts/deploy-kafka.sh $ sh scripts/show-urls.sh
Вывод последней команды выводит URL-адрес загрузочного сервера Kafka, который вам понадобится на следующем шаге. Вы можете найти все ресурсы в пространстве имен “кафка”.
Чтобы получить доступ к Кафке из кварков, соединитель Кафки должен быть настроен . При запуске приложения Quarks в том же кластере Kubernetes, что и Kafka, используйте следующую конфигурацию в “application.properties”.’ мой-кластер-кафка-внешняя-начальная загрузка” – это имя службы, “кафка” – пространство имен и “9094” – порт.
kafka.bootstrap.servers=my-cluster-kafka-external-bootstrap.kafka:9094` mp.messaging.incoming.new-article-created.connector=smallrye-kafka` mp.messaging.incoming.new-article-created.value.deserializer=org.apache.kafka.common.serialization.StringDeserializer
При локальной разработке приложения Quarks доступ к Kafka в мини-кубе осуществляется через порт узла. В этом случае замените конфигурацию kafka.bootstrap.servers следующим URL-адресом:
$ minikubeip=$(minikube ip) $ nodeport=$(kubectl get svc my-cluster-kafka-external-bootstrap -n kafka --ignore-not-found --output 'jsonpath={.spec.ports[*].nodePort}') $ echo ${minikubeip}:${nodeport}
Вариант 2: Кафка как услуга
Большинство облачных провайдеров также размещают управляемые сервисы Kafka. Например Потоки событий – это управляемый сервис Kafka в облаке IBM. Существует бесплатный тарифный план lite, который предоставляет доступ к одному разделу в кластере потоков событий с несколькими арендаторами. Все, что вам нужно, это IBM id , который является бесплатным, и вам не нужна кредитная карта.
Как и большинство сервисов Kafka в производстве, потоки событий требуют безопасного подключения. Эту дополнительную конфигурацию необходимо снова определить в разделе “приложение.свойства”.
kafka.bootstrap.servers=broker-0-YOUR-ID.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093,broker-4-YOUR-ID.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093,...MORE-SERVERS mp.messaging.incoming.new-article-created.connector=smallrye-kafka mp.messaging.incoming.new-article-created.value.deserializer=org.apache.kafka.common.serialization.StringDeserializer mp.messaging.incoming.new-article-created.sasl.mechanism=PLAIN mp.messaging.incoming.new-article-created.security.protocol=SASL_SSL mp.messaging.incoming.new-article-created.ssl.protocol=TLSv1.2 mp.messaging.incoming.new-article-created.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="token" password="YOUR-PASSWORD";
Для того, чтобы ввести эту информацию, вам необходимо 1. список серверов начальной загрузки Kafka и 2. ваш пароль для службы потоков событий. Вы можете получить эту информацию в веб-интерфейсе службы потоков событий или использовать интерфейс командной строки IBM Cloud.
Мой коллега Харальд Уэбеле разработал скрипт , который программно создает службу и возвращает эти две части информации.
следующие шаги
Сценарии, упомянутые в этой статье, являются частью проекта cloud-native-starter, в котором описывается, как разрабатывать реактивные приложения с помощью Quarkus. Моя предыдущая статья описывает проект.
Попробуйте код самостоятельно.
Прочитайте другие статьи этой серии:
- Разработка реактивных приложений с кварками
- Доступ к Apache Kafka из кварков
- Доступ к PostgreSQL в Kubernetes из кварков
- Примеры реактивных сообщений для кварков
- Разработка реактивных API-интерфейсов REST с использованием кварков
- Асинхронный вызов API-интерфейсов REST с кварками
- Сравнение синхронного и асинхронного доступа к Postgres
Оригинал: “https://dev.to/nheidloff/accessing-apache-kafka-from-quarkus-30na”