我们最初的想法是利用数据库触发机制并编写可以监听这些事件并将它们发布到Kafka总线的组件。实际上,我们开始编写针对PostgreSQL的代码来实现这一目标,但后来我们遇到了Debezium项目,该项目基本上解决了同样的问题,虽然不是在相同的上下文中,但是具有更成熟的代码库和对多个数据库系统的支持。重新发明轮子是没有意义的,因此目标变成了如何最好地整合Debezium和Knative。
经过一些阅读和实验,我们最终得到了图1所示的解决方案。可以看出,它包含一个连接到Kafka Connect服务的MySQL数据库; 这使用Debezium MySQL插件在Kafka总线上产生消息; Knative的Apache Kafka事件源连接到其清单中指定的Kafka总线上的特定主题; 最后,Event Display打印出它从Apache Kafka事件源接收的消息。
Kafka Connect--一个将外部系统连接到Kafka集群的框架 - 通过插件架构支持各种插件,其中一个是Debezium。Debezium实际上包含多个插件,每个插件支持一个数据库。在我们的例子中,我们使用了MySQL插件,它通过标准端口与MySQL数据库通信,并在数据库的二进制日志(binlog)上运行。binlog本质上是数据库上发生的所有操作的有序记录。Debezium连接器筛选binlog,根据需要进行过滤,并从binlog文件中的条目生成事件,然后将其传输到Kafka主题,为每个数据库表创建一个新主题。
最后,为了使用新