Как удаленному сервису достучаться к Apache Kafka: HTTP или REST API

Автор Категория , ,
Как удаленному сервису достучаться к Apache Kafka: HTTP или REST API

Сегодня поговорим про обучение Apache Kafka и рассмотрим сценарии применения HTTP и RESTful протоколов в этой Big Data платформе потоковой обработки событий. Читайте далее, чем парадигма request-response отличается от event streaming processing, как связаны REST и HTTP, каковые преимущества RESTful API и где это используется на практике для обработки и аналитики больших данных.

Что такое REST и при чем здесь HTTP

Начнем с практического примера: предположим, нужно вызвать удаленный сервис для каждого полученного сообщения из Apache Kafka. В одном из топиков хранятся данные для потребления (Topic:in), к примеру, транзакции, которые считывает компонент обработки (Processing Component). Для каждой считанной транзакции processing component вызывает удаленный сервис, например, для ее проверки на мошенничество. Полученный результат компонент обработки записывает в другой топик Kafka (Topic:out). Для такого случая можно использовать удаленную HTTP-службу, но также подходит и REST-клиент, который обеспечивает отличный способ взаимодействия с HTTP-службами без необходимости обрабатывать низкоуровневые детали HTTP-протокола [1].

Kafka, RPC, REST, HTTP, remote call
Схема работы удаленного сервиса с Apache Kafka

Напомним, в основе HTTP-протокола лежит парадигма «запрос-ответ» (request-response), для которой характерны следующие признаки [2]:

  • низкая временная задержка
  • синхронность (в большинстве случаев);
  • прямое соединение (точка-точка, point to point)
  • предопределенный API.

Потоковой обработке событий (event streaming processing), на которую ориентирована Apache Kafka, присущи совсем другие особенности:

  • непрерывная обработка;
  • асинхронность (в большинстве случаев);
  • фокус на событиях;
  • универсальный подход к обработке событий.

На практике чаще всего требуется совмещение обоих парадигм. В частности, запрос-ответ для точечной связи, например, между сервером и мобильным приложением, и потоковая передача событий для непрерывной обработки данных.

Потоковая обработка часто реализуется с помощью REST (Representational State Transfer, передача состояния представления), архитектурного стиля взаимодействия компонентов распределённого приложения в сети. REST – это согласованный набор ограничений при проектировании распределённой системы, чтобы повысить ее производительность и упростить архитектуру. REST считается альтернативой удаленного вызова процедур (RPC, Remote Procedure Call), но не является стандартом или протоколом. Если веб-сервис разработан с учетом архитектурного стиля REST, т.е. не нарушает его ограничений, его называют RESTful. Большинство RESTful-реализаций используют такие стандарты, как HTTP, URL, JSON и реже XML [3].

Чем хорош RESTful API в Apache Kafka: 7 популярных use-case’ов

Возвращаясь к Apache Kafka, отметим, что при выборе HTTP или REST API нужно учитывать следующие аспекты в архитектуре системы [2]:

  • управление и администрирование кластера Kafka, в т.ч. его конфигурирование (управление топиками, группами потребителей, списками контроля доступа и пр). В плане интеграция CI/CD и DevOps наиболее популярным способом создания конвейеров и автоматизации процессов является HTTP API. Это удобнее Python-скриптов и прочих альтернатив. О Python-клиентах для работы с Apache Kafka мы рассказывали здесь.
  • данные – обычно разработчики распределенных Big Data приложений предпочитают REST API для отправки сообщений в топики Kafka и потребления их оттуда.
  • распространенность практического использования – многие разработчики и администраторы знакомы и успешно работают с REST API, который предоставляет различные передовые практики и рекомендаций обеспечения информационной безопасности.

Подчеркнем, что REST API не является конкурентом HTTP, т.е. вопрос «REST vs HTTP в Apache Kafka» не совсем корректен, поскольку RESTful-реализации активно используют стандарт HTTP. Это подтверждают различные варианты использования Apache Kafka для обработки и интеграции больших объемов данных [2]:

  • мобильные приложения, которые часто требуют интеграции через HTTP и запрос-ответ. WebSockets, Server-Sent Events (SSE) и аналогичные концепции лучше подходят для потоковой передачи событий с помощью Kafka. Они находятся в клиентском фреймворке, хотя часто не поддерживаются.
  • интеграция проприетарных систем (legacy) со сторонними приложениями, что часто организуется через HTTP и REST. При этом ETL-процессы (извлечение, преобразование и загрузка) и работа с сервисной шиной предприятия (ESB, Enterprise Service Bus) могут быть отлично реализованы с помощью потоковой передачи событий на базе Kafka. Примеры таких систем мы описывали здесь и здесь.
  • шлюз API, если инструменты управления API не обеспечивают встроенной поддержки потоковой передачи событий с Kafka и работают только поверх REST-интерфейсов. Взаимодействие с Kafka через REST-интерфейс ​​и управление API хорошо дополняют друг друга и подходят для таких сценариев, как монетизация услуг или интеграция с партнерскими системами.
  • разные языки программирования, которые могут не поддерживаться Kafka. В этом случае пригодится REST API. Например, COBOL, на мэйнфреймах, до сих пор часто распространенный во многих государственных предприятиях и банках с длительной историей существованиях, не предоставляет клиента Kafka. Поэтому REST Proxy будет подходящим и жизнеспособным решением для работы такой системы с потоками Big Data.

Дополнительными преимуществами практического использования REST API в Apache Kafka можно назвать следующие [2]:

  • независимость от технологии;
  • распространенность стиля REST;
  • безопасность и простота: открывать порты HTTP проще, чем TCP собственного протокола Kafka, используемого клиентами Java, Go, C ++ или Python.

Завтра мы продолжим разговор о REST API в Apache Kafka и рассмотрим его реализацию от Confluent. А научиться администрированию кластера и разработке приложений Kafka для потоковой аналитики больших данных вы сможете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

 

 

Источники

  1. https://quarkus.io/blog/kafka-rest-client/
  2. https://www.confluent.io/blog/http-and-rest-api-use-cases-and-architecture-with-apache-kafka/
  3. https://ru.wikipedia.org/wiki/REST