Что такое вебхук и как отправить событие из PostgreSQL в Apache Kafka, используя API Webhook на платформе Upstash. NoCode-интеграция БД и брокера сообщений: практический пример.
Практический пример: CDC из PostgreSQL в Kafka через веб-хуки
Веб-хук или перехватчик – это настраиваемый обратный HTTP-вызов из одной системы к другой. Он используется для асинхронной интеграции систем для событийного обмена данными, т.е. не по расписанию. Вместо синхронного взаимодействия в стиле запрос-ответ клиент не обращается к серверу за новыми данными, а сервер сам вызывает клиент тогда, когда у него появились изменения. Это сокращает нагрузку на сеть, позволяя избежать периодических и безрезультатных обращений клиента к серверу за новыми данными.
Когда на сервере происходит новое событие, он уведомляет API веб-перехватчика, выполняя вызов внешней системы-приемника по HTTP. Поскольку API веб-хуков – это чистые HTTP-запросы, их можно добавлять к существующим потокам без использования другого слоя, например, бессерверных функций, для вызова целевого API.
Рассмотрим, как это работает на примере передачи изменений из таблицы PostgreSQL в топик Kafka. Подобную демонстрацию потокового захвата измененных данных (CDC, Change Data Capture) с настройкой логической репликации в PostgreSQL и Debezium-коннектора к Kafka я показывала здесь. Реализуем эту же самую передачу в Kafka, развернутой в сервисе Upstash, данных об операциях в таблице с jwt-токенами из PostgreSQL.
Для этого на платформе Hasura, которая связана с БД PostgreSQL, я создала событийный триггер для таблицы с jwt-токенами. Веб-хуки очень простой способ связать системы: при наличии Webhook API у системы-приемника на системе-источнике даже почти не требуется никаких настроек.
API Webhook Kafka в Upstash позволяет публиковать события напрямую в топике без использования сторонней инфраструктуры или сервиса. Этот API поддерживает базовую HTTP-аутентификацию и передачу учетных данных в качестве параметров запроса. Поскольку я решила передавать в Kafka из PostgreSQL все данные об изменениях в таблице jwts, выбраны методы Insert, Update, Delete и все столбцы.
Чтобы было поинтереснее, вместо простой передачи данных об изменениях таблицы в Apache Kafka, я решила немного изменить полезную нагрузку, тем более, что Hasura это позволяет. Предположим, в Kafka нужно передать не всю информацию о произошедшем событии, а только его время, таблицу, тип операции и запись, с которой была выполнена эта операция.
Результат такого преобразования полезной нагрузки можно увидеть в GUI Upstash при просмотре содержимого топика Kafka после выполнения операций мутации с таблицей jwts, например, изменение данных.
Разумеется, все события, публикуемые в Kafka с помощью вебхуков, отображаются на общем графике пропускной способности этого топика.
Таким образом, интеграция PostgreSQL с Kafka через веб-хуки оказалась еще проще, чем с помощью Debezium-коннектора. Однако, этот способ подходит не для всех сценариев. Поскольку веб-хуки – это перехватчики HTTP-вызовов, они работают медленнее непосредственной публикации данных в Kafka по TCP-протоколу. Это обусловлено пакетным характером HTTP-протокола, а также необходимостью установки соединения при каждом запросе. В протоколе TCP, по которому взаимодействуют клиенты Kafka с этим брокером сообщений, таких факторов задержки нет. Впрочем, для передачи уведомлений об изменениях, т.е. событийной отправки небольшого объема данных, этот способ вполне подходит. Кроме того, организовать взаимодействие через веб-хуки при наличии Webhook API намного проще настройки коннектора и, тем более, разработки приложения-потребителя.
Освойте все тонкости работы с Apache Kafka на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве: