在 MySQL 和 Redpanda/Kafka 中使用 Materialise 和 Airbyte
这是一个使用Materialize的独立演示。 此演示将向您展示如何使用 Materialise 和 Airbyte 创建实时仪表板。 对于这个演示,我们将在我们的演示网站上监控订单并生成事件,这些事件稍后可用于在购物车长时间被遗弃时发送通知。 此演示是如何在实时物化视图中加入 PostgreSQL 和 MySQL教程的扩展,但我们将使用 Airbyte 从 MySQL 中逐步提取超过CDC的订单
这是一个使用Materialize的独立演示。
此演示将向您展示如何使用 Materialise 和 Airbyte 创建实时仪表板。
对于这个演示,我们将在我们的演示网站上监控订单并生成事件,这些事件稍后可用于在购物车长时间被遗弃时发送通知。
此演示是如何在实时物化视图中加入 PostgreSQL 和 MySQL教程的扩展,但我们将使用 Airbyte 从 MySQL 中逐步提取超过CDC的订单,而不是使用 Debezium CDC。
图:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--URSejy4u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent .com/21223421/158989609-45cd719d-7326-4a60-bc01-e75b663851dd.png)
先决条件
在开始之前,您需要确保已安装 Docker 和 Docker Compose。
您可以按照此处有关如何安装 Docker 的步骤进行操作:
安装 Docker
请注意,Airbyte Cloud 目前不支持将 Kafka 作为目的地,这就是为什么我们只能使用自托管的 Airbyte 实例跟随此演示。
运行演示
请注意,对于带有 M1 的 Mac,由于以下问题,您可能会遇到一些 Airbyte 问题:
https://github.com/airbytehq/airbyte/issues/2017
所以我建议使用 Ubuntu VM 来运行演示。
启动所有服务:
docker-compose up -d
进入全屏模式 退出全屏模式
空字节
通过访问your_server_ip:8000
设置 Airbyte 服务,然后按照说明进行操作。
添加源
我们将使用MySQL作为我们从中提取订单的来源。
通过 Airbyte UI,单击Sources
选项卡,然后单击Add new source
按钮。
填写以下详细信息:
-
姓名:
orders
-
来源类型:
MySQL
-
主机:
your_server_ip
-
端口:
3306
-
数据库:
shop
-
用户名:
airbyte
-
密码:
password
-
禁用 SSL
-
复制方法:
CDC
最后,点击Setup source
按钮。
添加目的地
接下来,向 Airbyte 添加一个目的地,该目的地将用于将事件发送到。
对于这个演示,我们将使用 Redpanda,但它与 Kafka 一起工作得很好。
首先单击Destinations
选项卡,然后单击Add new destination
按钮并填写以下详细信息:
-
名称:
redpanda
-
目的地类型:
Kafka
接下来,填写所有必填字段并单击Setup destination
按钮。
根据您的需要,您可能想要更改一些设置,但对于此演示,我们将使用默认设置。
此演示需要注意的重要事项是:
-
Topic
是orders
-
Bootstrap Servers
是redpanda:9092
最后,点击Save
按钮。
建立连接
现在您已经有了源和目标,您需要在它们之间建立连接。这是必要的,以便 Airbyte 可以根据特定的时间表(例如每天、每小时、每 5 分钟等)将事件从源发送到目的地。
对于这个演示,我们将使用 5 分钟的时间表。希望将来,Airbyte 将允许您自定义此设置并将时间表减少到 1 分钟。
单击Connections
选项卡,然后单击Add new connection
按钮并填写以下详细信息:
-
将“复制频率”设置为
5 minutes
-
将“目标命名空间”设置为“镜像源结构”
-
将源设置为
orders
,将“同步模式”设置为Incremental
[](https://res.cloudinary.com/practicaldev/image/fetch/s--jcZUNHFj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent .com/21223421/158997265-6890282a-a997-495e-b723-265818c8ed24.png)
接下来单击“设置连接”按钮。最后,点击Sync now
按钮开始同步。
建立连接和发送事件可能需要几分钟。
同步完成后,您可以看到您在设置目的地时指定的 Redpanda 主题中的事件。让我们来看看如何做到这一点!
查看Redpanda话题
要检查自动生成的主题,您可以运行以下命令:
- 访问 Redpanda 容器:
docker-compose exec redpanda bash
进入全屏模式 退出全屏模式
- 列出主题:
rpk topic list
进入全屏模式 退出全屏模式
- 消费话题:
rpk topic consume orders_topic
进入全屏模式 退出全屏模式
请注意,如果您在初始设置期间使用了不同的主题名称,则需要在上面的命令中更改它。
如果您还没有看到该主题,您可能需要额外等待几分钟,并确保ordergen
服务模拟已启动并正在运行。
验证主题具有 CDC 事件后,您可以继续并设置 Materialise。
创建物化SOURCE
接下来,我们需要在 Materialise 中创建一个SOURCE
。
您可以通过返回终端并运行以下命令来做到这一点:
- 访问
mzcli
容器:
docker-compose run mzcli
进入全屏模式 退出全屏模式
或者,如果您安装了psql
:
psql -U materialize -h localhost -p 6875 materialize
进入全屏模式 退出全屏模式
通过执行以下语句创建 KafkaSOURCE
:
CREATE SOURCE airbyte_source
FROM KAFKA BROKER 'redpanda:9092' TOPIC 'orders_topic'
FORMAT BYTES;
进入全屏模式 退出全屏模式
注意:将
orders_topic
更改为您在 Airbyte 设置期间指定的主题。
使用TAIL
快速查看数据:
COPY (
TAIL (
SELECT
CAST(data->>'_airbyte_data' AS JSON) AS data
FROM (
SELECT CAST(data AS jsonb) AS data
FROM (
SELECT * FROM (
SELECT convert_from(data, 'utf8') AS data FROM airbyte_source
)
)
)
)
)
TO STDOUT;
进入全屏模式 退出全屏模式
当 Airbyte 将数据发送到目的地时,您将看到一个数据流,Materialize 以极小的亚毫秒延迟对其进行处理。
有关如何使用TAIL
的更多信息,请查看Joaquin Colacci的这篇博文:在 Materialise 中使用 TAIL 订阅视图中的更改
创建物化视图
现在我们在 Materialise 中有一个SOURCE
,我们可以创建一个物化的VIEW
。物化视图让您可以使用标准 SQL 查询非常快速地检索数据的增量更新结果。
要创建物化视图,请执行以下语句:
CREATE MATERIALIZED VIEW airbyte_view AS
SELECT
data->>'id' AS id,
data->>'user_id' AS user_id,
data->>'order_status' AS order_status,
data->>'price' AS price,
data->>'created_at' AS created_at,
data->>'updated_at' AS updated_at
FROM (
SELECT
CAST(data->>'_airbyte_data' AS JSON) AS data
FROM (
SELECT CAST(data AS jsonb) AS data
FROM (
SELECT * FROM (
SELECT convert_from(data, 'utf8') AS data FROM airbyte_source
)
)
)
);
进入全屏模式 退出全屏模式
接下来,运行查询以查看数据:
SELECT * FROM airbyte_view;
进入全屏模式 退出全屏模式
要可视化数据,您可以使用 BI 工具,例如Metabase,或者,由于 Materialize 与 Postgres 线路兼容,您可以使用自己喜欢的编程语言并构建自己的仪表板。有关支持的工具和集成的更多信息,请查看物化视图文档
停止演示
要停止演示,请运行:
docker-compose down -v
进入全屏模式 退出全屏模式
有用的链接
-
实现
-
空字节
-
物化云
-
Materialise 演示
-
红熊猫
有关使用 Debezium 的此演示的类似版本,请查看此处的帖子:
- 如何在实时物化视图中加入 MySQL 和 Postgres
社区
如果您有任何问题或意见,请加入Materialise Slack 社区!
更多推荐
所有评论(0)