变更数据捕获 (CDC) 是现代云原生架构的基石,能够实现实时事件驱动型应用程序。Debezium 作为领先的 CDC 平台,提供强大的单消息转换 (SMT),可在数据流到达目标之前对其进行过滤、路由和修改。
虽然 Debezium 是一个基于 Java 的项目,但许多云原生应用程序是用 Go 编写的。通过此最新增强功能,您现在可以使用 Go 编写 SMT 过滤器和路由器,使 Go 开发人员能够在一个 Java 技术中微调数据处理,这得益于 TinyGo 和 WebAssembly。
这篇博文将探讨如何在 Debezium 中使用 Go 插件,演示此功能如何增强云原生团队的灵活性和定制性。
Debezium 中的 Go SMT 过滤器和路由器
引言
变更数据捕获 (CDC) 是现代事件驱动架构的核心,它使应用程序能够实时响应数据库更改。Debezium 长期以来提供了一套强大的单消息转换 (SMT),用于在事件到达最终目的地之前进行过滤、路由和修改。但是,如果您想使用 Java 以外的语言来扩展 Debezium 的功能呢?
通过最新的增强功能,Debezium 现在允许开发人员使用 Go 编写 SMT 过滤器和路由器,为云原生应用程序开辟了新的可能性。由于 Go 在云环境中被广泛使用,这项功能使用户能够无需离开其主要开发生态系统即可自定义其 CDC 流水线。
为什么选择 Go 来实现 SMT?
Debezium 在 JVM 上运行,并且其 SMT 传统上是基于 Java 的,利用 JSR 223。这对于想要用 Groovy 或类似语言编写过滤器的 Java 开发人员来说非常方便,但许多构建云原生应用程序的团队依赖于 Go。通过这项新功能,您现在可以:
-
使用 Go 编写 SMT 过滤器和路由器,利用其简洁性、性能和类型系统。
-
避免 Java 依赖开销,当 Go 是您的主要语言时,您无需向类路径添加额外的 jar。
-
更靠近您现有的 Go 基础的微服务,定制事件处理逻辑。
这使得 Go 开发人员无需 Java 专业知识即可轻松地微调更改事件的过滤和路由方式。
工作原理
该集成基于 Go 插件,允许 Debezium 动态加载和执行基于 Go 的 SMT。这些插件充当轻量级、可自定义的事件处理器,在 CDC 事件到达 Kafka 或其他下游系统之前对其进行过滤和路由。
以下是一个定义简单 Go SMT 过滤器的示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main
import (
"github.com/debezium/debezium-smt-go-pdk"
)
// Example filter function
//export process
func process(proxyPtr uint32) uint32 {
var topicNamePtr = debezium.Get(proxyPtr, "topic")
var topicName = debezium.GetString(topicNamePtr)
return debezium.SetBool(topicName == "mytopic")
}
func main() {}
该函数应使用 TinyGo 进行编译。
tinygo build -ldflags='-extldflags --import-memory' --no-debug -target=wasm-unknown -o filter.wasm filter.go 该函数可以作为插件加载到 Debezium 中,从而使事件处理流水线能够以 Go 语言执行自定义过滤逻辑。以下是一个实现此目标的示例配置:
transforms=filter
transforms.filter.type=io.debezium.transforms.Filter
transforms.filter.language=wasm.chicory
transforms.filter.expression=file://filter.wasm 此功能适用于哪些场景?
此功能特别适用于:
-
Go 已经是主导语言的云原生应用程序。
-
希望在没有 Java 专业知识的情况下扩展 Debezium 的团队。
-
轻量级部署的环境,Go 的效率和对数据的惰性访问有助于降低资源使用。
展望未来
虽然此功能目前专注于基于 Go 的 SMT,但它也暗示了一个更广泛的趋势:允许 Debezium 用户将他们自己的语言引入 CDC 处理流水线。WebAssembly (Wasm) 可以进一步扩展这一概念,允许使用多种语言编写转换,同时保持可移植性和安全性。Chicory 被用作 Wasm 的零依赖 Java 运行时。
目前,如果您正在使用基于 Go 的云原生系统,并希望微调您的 CDC 流水线,Debezium 中的这项新功能是一个令人兴奋的进步。
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。