Debezium 博客
更新(2019年10月11日):在Kubernetes上运行Debezium(以及Apache Kafka和Kafka Connect)的一个更简单的方法是使用K8s Operator,例如Strimzi。您可以在此处找到在OpenShift上设置Debezium的说明,对于纯Kubernetes也适用类似的步骤。
我们的Debezium教程将逐步引导您完成Debezium的使用,通过安装、启动和连接运行在单个主机上的所有Docker容器。当然,您可以使用Docker Compose或自己的脚本来简化操作,但这只是自动化在单台机器上运行所有容器。您真正想要的是在多台机器的集群上运行容器。在这篇博文中,我们将使用Red Hat和Google提供的容器集群管理器Kubernetes来运行Debezium。
Kubernetes是一个容器(Docker/Rocket/Hyper.sh)集群管理工具。像许多其他流行的集群管理和计算资源调度平台一样,Kubernetes的根源在于Google,Google在运行大规模容器方面经验丰富。他们每周启动、停止和集群20亿个容器,并且他们贡献了许多使容器成为可能的核心Linux底层技术。他们一篇著名的论文讨论了一个名为Borg的内部集群管理器。有了Kubernetes,Google对大家用Java实现他们的论文感到厌倦,于是决定自己实现这篇论文:)
Kubernetes是用Go语言编写的,并且迅速成为大规模调度、管理和集群容器的实际API。这篇博文并非旨在成为Kubernetes的入门指南,因此我们建议您查阅入门指南文档以了解更多关于Kubernetes的信息。
当我们的MySQL连接器读取MySQL服务器或集群的binlog时,它会解析日志中的DDL语句,并随着时间的推移构建一个内存中的表模式模型。这个过程很重要,因为连接器会使用事件发生时表的定义为每个表生成事件。我们无法使用数据库的当前模式,因为它可能自连接器读取的时间点(或日志中的位置)以来已经发生了变化。
解析MySQL或任何其他主要关系数据库的DDL可能是一项艰巨的任务。通常,每个DBMS都有高度定制的SQL语法,尽管数据操作语言(DML)语句通常非常接近标准,但数据定义语言(DDL)语句通常不那么标准,并且涉及更多DBMS特定的功能。
那么,考虑到这一点,为什么我们自己编写了MySQL的DDL解析器呢?让我们首先看看Debezium需要DDL解析器做什么。