MySQL 5.7 引入了一种新的数据类型,用于 存储和处理 JSON 数据。客户端可以定义带有新 JSON 数据类型 列的表,并可以使用 SQL 语句和新的内置 JSON 函数来存储和读取 JSON 数据,这些函数可以从其他关系型列构建 JSON 数据,内省 JSON 值的结构,以及在 JSON 数据中进行搜索和操作。可以为表定义生成列,其值从同一表中的另一个列的 JSON 值计算得出,然后为这些生成列定义索引。总的来说,这是 MySQL 中一个非常强大的功能。

Debezium 的 MySQL 连接器将在即将发布的 0.3.4 版本中支持 JSON 数据类型。JSON 文档、数组和标量值将作为字符串出现在变更事件中,模式名称为 io.debezium.data.json。这将使消费者能够方便地处理 JSON 数据。顺便说一句,这与 MongoDB 连接器用于表示 JSON 数据的语义模式类型相同。

这听起来很简单,我们希望也是如此。但是 实现这一点 需要大量的工作。这是因为尽管 MySQL 以字符串形式向客户端应用程序公开 JSON 数据,但它在内部以一种特殊的二进制形式存储所有 JSON 数据,这种形式允许 MySQL 引擎在查询、JSON 函数和生成列中高效地访问 JSON 数据。所有 JSON 数据也以这种二进制形式出现在 binlog 中,这意味着如果我们想提取更有用的字符串表示形式,就必须自己解析二进制形式。编写和测试这个解析器花费了一些时间和精力,最终我们将其捐赠给了连接器内部用于读取 binlog 事件的优秀MySQL binlog 客户端库

我们要感谢 Stanley Shyiko 在解析 binlog 中的 JSON 时指导我们并帮助我们调试最终问题,感谢他将我们提出的更改合并到他的库中,并在需要时迅速发布了他的库,以及他对我和其他问题的及时响应!

Randall Hauch

Randall 是 Red Hat 的开源软件开发者,近 20 年来一直从事数据集成工作。他是 Debezium 的创始人,并参与过其他几个开源项目。他住在伊利诺伊州爱德华兹维尔,靠近圣路易斯。

     


关于 Debezium

Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。

参与进来

我们希望您觉得 Debezium 有趣且有用,并希望尝试一下。在 Twitter @debezium 上关注我们,在 Zulip 上与我们聊天,或加入我们的 邮件列表 与社区交流。所有代码都在 GitHub 上开源,因此请在本地构建代码,帮助我们改进现有连接器并添加更多连接器。如果您发现问题或有改进 Debezium 的想法,请告诉我们或 记录一个问题

版权所有 © Debezium 及其作者。保留所有权利。有关我们的商标详情,请访问我们的 商标政策商标列表。第三方商标属于其各自所有者,在此提及并不表示任何认可或关联。
×