Обзор Kafka REST Proxy
Возможности Kafka REST Proxy
Kafka REST Proxy — специальный прокси-сервер, созданный Confluent. Kafka REST Proxy предоставляет RESTful-интерфейс для взаимодействия с кластерами Kafka, позволяющий пользователям записывать и читать сообщения, используя HTTP/HTTPS-запросы.
Взаимодействие внешних систем с брокерами Kafka по умолчанию выполняется при помощи определенного набора API и инструментов CLI, обеспечиваемых клиентской библиотекой Java. Также поддерживаются клиентские библиотеки для некоторых языков программирования.
Kafka REST Proxy помогает обойти ограничения, связанные с узким выбором способов взаимодействия с Kafka. Любое приложение, в том числе основанное не на JVM, можно настроить для работы с кластером Kafka независимо от языка программирования, если оно имеет возможность отправлять HTTP/HTTPS-запросы.
Основные функциональные возможности Kafka REST Proxy перечислены ниже:
-
Интерфейс HTTP RESTful позволяет клиентам взаимодействовать с Kafka при помощи стандартных методов HTTP, обеспечивая совместимость с различными языками программирования.
-
Обеспечивается взаимодействие с Kafka API через прокси-сервер:
-
создание и отправка сообщений в топики Kafka в различных форматах;
-
подписка на топики и чтение сообщений в режиме реального времени;
-
получение данных о кластере и топиках.
-
-
Поддерживается интеграция со Schema Registry для создания и развития схем данных.
-
Поддерживаются механизмы аутентификации и авторизации для защиты доступа к кластерам Kafka.
Архитектура Kafka REST Proxy
Ниже на рисунке показана архитектура Kafka REST Proxy.
HTTP-запросы к Kafka REST Proxy
Каждый экземпляр Kafka REST Proxy — отдельный прокси-сервер, являющийся дополнительным уровнем между клиентом и брокером Kafka.
Клиент направляет HTTP-запрос к REST API сервера Kafka REST Proxy с использованием IP-адреса сервера Kafka REST Proxy, а не брокера Kafka.
Запрос на запись данных представляет собой метод POST
с указанием метаданных (место, где будет храниться сообщение) и телом запроса с содержимым сообщения.
Запрос на получение данных из Kafka представляет собой метод GET
с указанием метаданных (место, откуда должно быть прочитано сообщение).
ПРИМЕЧАНИЕ
Для получения примеров запросов к серверу Kafka REST Proxy вы можете обратиться к статье Пример использования Kafka REST Proxy.
|
Сервер Kafka REST Proxy преобразует полученные запросы в экземпляры приложений Kafka API (Producer API, Consumer API или Admin API) и возвращает пользователю ответ, основанный на результате отработки приложения.
Сериализация и десериализация
Для выполнения сериализации и десериализации данных сервер Kafka REST Proxy подключается к REST API сервера Schema Registry и осуществляет запись новой или получение уже имеющейся схемы. Для этого в пользовательских запросах к серверу Kafka REST Proxy используются специальные заголовки:
-
Content-Type
— определяет тип контента, который должен быть записан в Kafka. -
Accept
— определяет тип содержимого, который может понять клиент.
В этих заголовках указывается тип контента в формате, использующемся в Schema Registry API.
Например, ниже приведен пример запроса, который записывает данные в топик Kafka, а также регистрирует схему в хранилище Schema Registry:
$ curl -X POST -H "Content-Type: application/vnd.kafka.avro.v2+json" \
-H "Accept: application/vnd.kafka.v2+json" \
--data '{"value_schema": "{\"type\": \"record\", \"name\": \"User\", \"fields\": [{\"name\": \"name\", \"type\": \"string\"}]}", "records": [{"value": {"name": "testUser"}}]}' \
"http://localhost:8082/topics/avrotest"
Безопасность
На стороне сервера Kafka REST Proxy настраивается аутентификация для двух соединений:
-
Соединение между клиентом и сервером Kafka REST Proxy.
Для этого соединения настраивается базовая HTTP-аутентификация с использованием пары
<имя пользователя>:<пароль>
. Данные для аутентификации пользователя передаются Kafka REST Proxy в HTTP-запросе при помощи заголовкаAuthorization
.Для включения взаимной SSL/TLS-аутентификации настраивается:
-
поддержка HTTPS для сервера Kafka REST Proxy;
-
хранилище доверенных сертификатов Kafka REST Proxy для проверки входящих клиентских сертификатов.
-
-
Соединение между Kafka REST Proxy и брокерами Kafka.
Если Kafka REST Proxy используется для связи с брокером Kafka, в котором уже настроена аутентификация по методу SASL, для каждого сервера Kafka REST Proxy необходимо установить соответствующие параметры для аутентификации пользователя Kafka REST Proxy в Kafka.
Если для брокера Kafka настроена SSL/TLS-аутентификация, для аутентификации пользователя Kafka REST Proxy необходимо настроить SSL-параметры.
Ограничения Kafka REST Proxy
При использовании Kafka REST Proxy в системах обработки данных необходимо учитывать следующие ограничения:
-
Не поддерживаются запросы на запись сообщений в несколько топиков одновременно — каждый HTTP-запрос от производителя может обращаться лишь к одному топику или партиции.
-
При помощи HTTP-запросов недоступно большинство переопределений конфигураций производителей и потребителей.
-
Недоступно использование разных сериализаторов для ключа и значения в сообщении.
-
Обработка запросов к Kafka REST Proxy производится при помощи синхронного протокола запроса-ответа. При этом для Kafka возможно подключение до десятков параллельных экземпляров Kafka REST Proxy, что достаточно для разных вариантов использования.
Kafka REST Proxy в ADS
Подключение
После добавления и установки сервиса Kafka REST Proxy в составе кластера ADS в запросе к серверу Kafka REST Proxy должен быть указан хост, где размещен компонент Kafka REST Proxy, и порт, указанный в качестве параметра rest_listener_port (по умолчанию 8082
) в группе Main на странице конфигурирования сервиса Kafka REST Proxy.

Kafka
В ADS сервис Kafka REST Proxy может быть установлен только после установки сервиса Kafka. После установки Kafka REST Proxy в конфигурационном файле /etc/kafka-rest/kafka-rest.properties автоматически устанавливается параметр bootstrap.servers
для связи с брокером Kafka.
Schema Registry
Сервис Schema Registry, установленный в ADS одновременно c сервисом Kafka REST Proxy, позволяет выполнять сериализацию и десериализацию данных при работе с топиками Kafka по интерфейсу RESTful. После установки обоих сервисов параметр schema.registry.url
автоматически устанавливается в конфигурационном файле Kafka REST Proxy /etc/kafka-rest/kafka-rest.properties.
Безопасность
Большинство опций безопасности для Kafka REST Proxy могут быть настроены при помощи интерфейса ADCM:
-
В кластере ADS базовую HTTP-аутентификацию для Kafka REST Proxy можно настроить при помощи включения Basic-аутентификации.
-
В кластере ADS аутентификация по методу SASL включается при помощи действия Manage Kerberos либо при запуске механизма SASL PLAINTEXT.
-
В кластере ADS cпециальный модуль kafka-rest-security предоставляет возможность проходить аутентификацию в Kafka с разными принципалами при подключении к Kafka через Kafka REST Proxy после включения аутентификации по методу SASL.
-
В кластере ADS SSL-аутентификация включается при помощи действия Manage SSL.
Настройка
Настройка параметров Kafka REST Proxy в интерфейсе ADCM выполняется на странице конфигурирования сервиса Kafka REST Proxy.
Для настройки параметров конфигурационных файлов /etc/kafka-rest/kafka-rest.properties переведите в активное состояние переключатель Show advanced, раскройте узел kafka-rest.properties или connect.properties и введите новые значения для параметров. Для изменения параметров ksqlDB, отсутствующих в интерфейсе ADCM, используйте поле Add key,value. Выберите Add property и введите наименование параметра и его значение.
После изменения параметров при помощи интерфейса ADCM перезагрузите сервис Kafka REST Proxy. Для этого примените действие Restart, нажав на иконку
в столбце Actions.