Создайте живую информационную панель с помощью Materialize, Airbyte, MySQL и Redpanda/Kafka
11 апреля 2022 г.Это автономная демонстрация с использованием [Materialize] (https://materialize.com).
Эта демонстрация покажет вам, как использовать Materialise с Airbyte для создания живой панели инструментов.
Для этой демонстрации мы собираемся отслеживать заказы на нашем демонстрационном веб-сайте и генерировать события, которые впоследствии можно будет использовать для отправки уведомлений, когда корзина была брошена в течение длительного времени.
Эта демонстрация является расширением Как объединить PostgreSQL и MySQL в живом материализованном представлении, но вместо использования Debezium CDC мы будем использовать Airbyte для постепенного извлечения заказов из MySQL через [CDC] (https://materialize.com/docs/connect/materialize-cdc/).
Диаграмма:
Предпосылки
Прежде чем начать, вам нужно убедиться, что у вас установлены Docker и Docker Compose.
Вы можете выполнить следующие шаги по установке Docker:
Обратите внимание, что Airbyte Cloud в настоящее время не поддерживает Kafka в качестве места назначения, поэтому мы можем следовать этой демонстрации только с собственным экземпляром Airbyte.
Запуск демонстрации
Обратите внимание, что для Mac с M1 у вас могут возникнуть проблемы с Airbyte из-за следующей проблемы:
Поэтому я бы рекомендовал использовать виртуальную машину Ubuntu для запуска демонстрации.
```javascript
экспортировать DOCKER_BUILD_PLATFORM=linux/arm64
экспорт DOCKER_BUILD_ARCH=arm64
экспортировать ALPINE_IMAGE=arm64v8/alpine:3.14
экспорт POSTGRES_IMAGE=arm64v8/postgres:13-alpine
экспорт JDK_VERSION=17
Запустить все службы:
``` ударить
docker-compose up -d
Эйрбайт
Настройте службу Airbyte, посетив your_server_ip:8000, а затем следуйте инструкциям.
Добавление источника
Мы собираемся использовать MySQL в качестве источника, откуда мы будем извлекать заказы.
В пользовательском интерфейсе Airbyte перейдите на вкладку «Источники» и нажмите кнопку «Добавить новый источник».
Заполните следующие данные:
- Название:
заказы
- Тип источника:
MySQL
- Хост:
your_server_ip
- Порт:
3306
- База данных:
магазин
- Имя пользователя:
airbyte
- Пароль:
пароль
- Отключить SSL
- Метод репликации:
CDC
Наконец, нажмите кнопку «Установить источник».
Добавление пункта назначения
Затем добавьте пункт назначения в Airbyte, который будет использоваться для отправки событий.
Для этой демонстрации мы собираемся использовать Redpanda, но она отлично подойдет и для Kafka.
Начните с нажатия на вкладку «Направления», нажмите кнопку «Добавить новый пункт назначения» и заполните следующие данные:
- Имя:
редпанда
- Тип назначения:
Кафка
Затем заполните все необходимые поля и нажмите кнопку «Установить место назначения».
В зависимости от ваших потребностей вы можете изменить некоторые настройки, но для этой демонстрации мы собираемся использовать значения по умолчанию.
Важные вещи, которые следует отметить для этой демонстрации:
- «Тема» — «заказы».
- «Серверы Bootstrap» — это «redpanda: 9092».
Наконец, нажмите на кнопку «Сохранить».
Установить соединение
Теперь, когда у вас есть источник и место назначения, вам нужно установить соединение между ними. Это необходимо для того, чтобы Airbyte мог отправлять события из источника в пункт назначения по определенному расписанию, например, каждый день, каждый час, каждые 5 минут и т. д.
Для этой демонстрации мы будем использовать 5-минутное расписание. Надеюсь, в будущем Airbyte позволит вам настроить это и сократить расписание, например, до 1 минуты.
Перейдите на вкладку «Подключения» и нажмите кнопку «Добавить новое подключение» и заполните следующие данные:
- Установите «Частота репликации» на «5 минут».
- Установите «Пространство имен назначения» на «Зеркало исходной структуры»
- Установите источник на «заказы», а «режим синхронизации» на «инкрементальный».
https://user-images.githubusercontent.com/21223421/158997265-6890282a-a997-495e-b723-265818c8ed24.png">
Далее нажмите на кнопку «Настроить соединение». И, наконец, нажмите кнопку «Синхронизировать сейчас», чтобы начать синхронизацию.
Установка соединения и отправка событий может занять несколько минут.
После завершения синхронизации вы можете увидеть события в теме Redpanda, которые вы указали при настройке места назначения. Давайте посмотрим, как это сделать!
Проверьте тему Redpanda
Чтобы проверить автоматически созданную тему, вы можете запустить следующие команды:
- Доступ к контейнеру Redpanda:
docker-compose exec redpanda bash
- Перечислите темы:
список тем рпк
- Потребляйте тему:
Тема rpk потребляет orders_topic
Обратите внимание: если вы использовали другое имя темы во время первоначальной настройки, вам необходимо изменить его в приведенных выше командах.
Если вы еще не видите эту тему, возможно, вам придется подождать несколько дополнительных минут, а также убедиться, что макет службы ordergen
запущен и работает.
Убедившись, что в теме есть события CDC, вы можете продолжить и настроить Materialize.
Создать материализовать SOURCE
Далее нам нужно создать ИСТОЧНИК в Materialise.
Вы можете сделать это, вернувшись к своему терминалу и выполнив следующие команды:
- Получите доступ к контейнеру
mzcli
:
``` ударить
docker-compose запустить mzcli
Или, если у вас установлен psql
:
``` ударить
psql -U материализовать -h localhost -p 6875 материализовать
Создайте Kafka SOURCE
, выполнив следующую инструкцию:
```sql
СОЗДАТЬ ИСТОЧНИК airbyte_source
ОТ KAFKA BROKER 'redpanda:9092' ТЕМА 'orders_topic'
ФОРМАТ БАЙТОВ;
Примечание: измените «orders_topic» на тему, которую вы указали во время настройки Airbyte.
Используйте TAIL
, чтобы быстро просмотреть данные:
```sql
КОПИРОВАТЬ (
ХВОСТ (
ВЫБРАТЬ
CAST(data->>'_airbyte_data' AS JSON) AS данные
ОТ (
SELECT CAST(данные AS jsonb) AS данные
ОТ (
ВЫБЕРИТЕ ИЗ (
ВЫБЕРИТЕ convert_from (данные, 'utf8') КАК данные ИЗ airbyte_source
НА ВЫБОР;
Вы увидите поток ваших данных, когда Airbyte отправляет их в пункт назначения, а Materialise обрабатывает их с минимальной задержкой в доли миллисекунды.
Для получения дополнительной информации о том, как использовать TAIL
, ознакомьтесь с этой записью в блоге Хоакина Колаччи: Подпишитесь на изменения в представлении с помощью TAIL в Materialize
Создайте [Материализованное представление] (https://materialize.com/docs/sql/create-materialized-view/)
Теперь, когда у нас есть «ИСТОЧНИК» в Materialise, мы можем создать материализованный «ВИД». Материализованное представление позволяет очень быстро получать постепенно обновляемые результаты ваших данных с помощью стандартных запросов SQL.
Чтобы создать материализованное представление, выполните следующую инструкцию:
```sql
СОЗДАТЬ МАТЕРИАЛИЗОВАННОЕ ПРЕДСТАВЛЕНИЕ airbyte_view AS
ВЫБРАТЬ
data->>'id' идентификатор AS,
данные->>'user_id' КАК user_id,
data->>'order_status' КАК order_status,
data->>'price' КАК цена,
данные->>'created_at' AS created_at,
данные->>'updated_at' AS updated_at
ОТ (
ВЫБРАТЬ
CAST(data->>'_airbyte_data' AS JSON) AS данные
ОТ (
SELECT CAST(данные AS jsonb) AS данные
ОТ (
ВЫБЕРИТЕ ИЗ (
ВЫБЕРИТЕ convert_from (данные, 'utf8') КАК данные ИЗ airbyte_source
Затем запустите запрос, чтобы увидеть данные:
```sql
ВЫБЕРИТЕ * ИЗ airbyte_view;
Для визуализации данных вы можете использовать инструмент бизнес-аналитики, такой как [Metabase] (https://materialize.com/docs/ Third-Party/metabase/), или, поскольку Materialize совместим с Postgres Wire, вы можете использовать свои любимые программы. язык и создать свою собственную панель инструментов. Для получения дополнительной информации о поддерживаемых инструментах и интеграциях ознакомьтесь с [документацией по материализованным представлениям] (https://materialize.com/docs/ Third-Party/supported-tools/).
Остановить демонстрацию
Чтобы остановить демонстрацию, запустите:
``` ударить
docker-compose вниз -v
Полезные ссылки
- [Материализировать] (https://materialize.com/)
- [Airbyte] (https://airbyte.io/)
- [Материализировать облако] (https://cloud.materialize.com/)
- [Материализировать демоверсии] (https://materialize.com/docs/demos/)
- [Редпанда] (https://redpanda.com/)
Чтобы получить аналогичную версию этой демонстрации с использованием Debezium, ознакомьтесь с сообщением здесь:
Сообщество
Если у вас есть какие-либо вопросы или комментарии, присоединяйтесь к Сообществу Materialise Slack!
Также опубликовано здесь
Оригинал