欢迎来到最新一期的“Debezium 社区故事”,这是一系列对 Debezium 和变更数据捕获社区成员(如用户、贡献者或集成商)的采访。今天,我很高兴能与 Lars M Johansson 对话。
Lars,您能介绍一下自己吗?如果您不为 Debezium 做贡献,您是做什么工作的?
您好,我叫 Lars Johansson(Magnus 是我的中间名,在瑞典这是一个相当常见的名字),我是一名 IT 架构师和顾问,今年年初开始创业。我曾在多家咨询公司和一些“正规”的科技公司工作过,但几乎一直专注于 Unix/Linux、Java 和开源领域。我曾为不同类型的业务系统工作,客户范围涵盖银行、零售、电信、生命科学和公共部门。
在过去的几年里,我一直在瑞典移民局的一个数字转型项目(由欧盟资助)中担任一项任务。该转型的一部分是引入事件驱动架构和 Apache Kafka,并因此通过 Kafka Connect 实现变更数据捕获 (CDC)。
在您当前的项目中,您使用 Debezium 和变更数据捕获的用例是什么?
我们使用 Debezium 和 CDC 有两个主要用例。
第一个用例,挑战性不如第二个,是实现事务性 Outbox 模式,以便从现有的、积极开发的应用程序生成业务事件到 Kafka。我们通过 Outbox Event Router 和相应的连接器来实现这一点,主要针对 PostgreSQL 数据库。
第二个、更具挑战性的用例是从一个基于 IBM Informix 的旧遗留系统中生成业务事件。这是过渡策略的一部分,旨在通过将相关的状态变更作为业务事件发布到新的事件流平台,从而将新应用程序和服务与旧的遗留系统解耦。
当我们开始这个旅程时,还没有公开可用的 Informix 连接器插件。原因大概可以用 Gunnar 在 Kafka Summit 的“专家问答”环节中,当我问他这个问题时的评论来概括。
> Gunnar: I think this is the third time I've heard that question.
> Lars: Today?
> Gunnar: No, in total. 于是我们开始自己编写,这是一个学习的过程。我们对 Informix 数据库的内部机制、其变更流 API 以及 Kafka Connect 了解得越多,就越意识到我们可能承担了过重的任务。
此外,随着事务性 Outbox 工作进展顺利,我们意识到最终也需要为 Informix 实现该模式,并且利用 Outbox Event Router 会带来巨大的好处。所以,我们开始着手将我们的工作移植到 Debezium 平台。
实际上,我们并不是唯一一个在考虑为 Informix 构建 Debezium 连接器的人。我们在 Debezium Informix 连接器 中发现了一个连接器的雏形。它基于 Debezium 1.5,所以我们着手将其更新到 2.x 标准,并将我们的工作合并其中。
与此同时,移民局有一个关于如何处理对开源项目的贡献的倡议。移民局的工作是由瑞典政府和欧盟提供的公共资金资助的,国家和欧洲层面都有促进回馈开源项目的战略和政策。因此,我们起草并采纳了一项政策,允许我们将我们的工作回馈给 Debezium 社区,并且 Debezium Informix 连接器 以 v2.5.0.Alpha1 版本公开发布。
这听起来非常有趣;您能告诉我们更多关于您遇到的挑战以及如何解决它们吗?
尽管表面上相似,但所有数据库在底层都有所不同。尤其是在变更数据捕获 API 方面。Informix 的公开文档及其 CDC API 也没有深入探讨,并非所有功能都已记录,而一些已记录的功能尚未实现。因此,仅仅弄清楚所有细微差别并处理它们的边缘情况就需要付出相当大的努力。例如,映射不同的数据类型以及 CDC API 支持哪些数据类型。
但毫无疑问,最大的挑战是确保所有重启和恢复情况都能安全一致地工作。最终,这主要是一个毅力的问题:加倍努力进行集成测试,确保涵盖所有可想象的情况,然后编码、测试、重构。然后反复测试……这可能也是将我们的工作移植到 Debezium 的最大好处之一:拥有测试框架和现有模块的广泛测试套件实现,可以从中获得灵感和想法。
另一个挑战,更多地与开源而非 CDC 相关,是我们正在开发以解决我们自己的用例。但其他人有其他的用例,并且他们以(对我们而言)完全出乎意料的方式导致插件崩溃。起初这很令人沮丧,在我们习惯了之后就好多了,但最终,这是开源之美的一部分,并且最终让我们所有人都变得更好。
作为 Debezium 社区主导的连接器的贡献者,您的体验如何?
总体来说,这是一个顺利的经历。一旦移民局批准了我们将工作发布到社区的倡议,我们就开始设置存储库并与 CI 工具集成。我们得到了您 Chris 和 Jiri Pechanec 的大力帮助,贡献指南也很有帮助。尽管 Informix 社区并非特别活跃,但我们很早就获得了一些关注和反馈、错误报告和改进建议,并且我们一直在稳步进步。
您还在做其他开源工作吗?
我零散地做过一些,但这算是我第一次真正贡献于一个开源项目。当然也是第一次获得任何形式的关注。
您认为 Debezium 中有哪些缺失的特性,希望在未来看到?
与从零开始编写自己的连接器相比,Debezium 确实是连接器开发中的一把瑞士军刀。但如果我必须建议什么,那将是通用支持对非常大的事务进行分布式缓存卸载,因为这是我们在 Informix 中实际遇到的一个问题……
Lars,非常感谢您抽出宝贵时间,很高兴能邀请到您!
如果您想与 Lars M Johansson 保持联系并与他讨论,请在下方留言或 在 GitHub 上关注并联系他。
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。