欢迎收看最新一期的“开云体育官方注册网址Debezium社区故事与…”,对Debezium和变更数据捕获社区成员的一系列访谈,如用户、贡献者或集成商。开云体育官方注册网址今天我很荣幸能和谢尔盖·莫洛佐夫

谢尔盖,你能自我介绍一下吗?如果你不为Debezium做贡献,你的工作是什么?开云体育官方注册网址

嗨,我的名字是Sergei,我是一名软件架构师SugarCRM.在我职业生涯的大部分时间里,我一直在基于LAMP堆栈构建软件。几年前,我和我的团队开始构建一个数据流平台,旨在整合现有的SugarCRM产品和我们想在其上构建的新服务。我们开始用Maxwell 's Daemon、AWS Kinesis和DynamoDB构建平台原型,后来切换到Kafka、Kafka Connect和Debezium。开云体育官方注册网址

有趣的是,Debezium是我开云体育官方注册网址们开始尝试Kafka生态系统的原因。我们在枢轴之前构建的解决方案只能流化CDC更改,但不能快照初始状态。在做快照的过程中,我们偶然发现了Debezium并发现了Kafka。开云体育官方注册网址经过一些实验和对生态系统的更多了解后,我们决定转换技术堆栈。

在您当前的项目中,Debezium和变更数据捕获的用例是开云体育官方注册网址什么?

我们从基于MySQL和SQL Server的产品中捕获数据变化,并使用它们来支持人工智能和数据分析用例。除了处理最近的更改外,我们还存储尽可能多的历史数据。这些数据来自云环境中托管的数千个客户数据库。开云体育电动老虎机

我们将其用于人工智能、分析和实现未来用例。例如,SugarPredict提供机会评分,并帮助销售代表关注那些更有可能倒闭的机会。来自CRM和其他来源的历史数据用于训练AI模型。数据更改事件用于运行评分过程和更新预测。

从数据流的角度来看,它看起来非常简单,但由于产品的灵活性和云规模,存在相当多的工程挑战。

这听起来很有趣;你能告诉我们更多你遇到的挑战以及你是如何解决它们的吗?

绝对的。让我深入探讨一下细节。我希望我们的想法和解决方案能对社会有所帮助。

灵活性和数据序列化

提供数据更改的产品是非常可定制的。客户可以创建新的模块、字段、安装扩展等,从CDC的角度来看,这意味着客户可以完全控制数据库模式。开云体育电动老虎机结合数千个客户的规模,使用Apache Avro变得很有挑战性,这意味着模式是由开发人员管理的。

几年前,我们测试了当时事实上的标准模式注册表(Schema Registry),得出的结论是,如果云中有大约100万个消息模式,它的性能就不会很好,甚至不包括模式版本,因为模式版本的数量是无限的。为了便于比较,该模式注册中心附带的托管产品允许存储多达1,000个模式。因此,我们求助于使用JSON来序列化数据。

新员工培训的挑战

SugarCloud是SugarCRM产品的多租户托管环境。它由几十个与mysql兼容的大型AWS Aurora集群组成,每个集群通常托管100到1000个客户数据库。开云体育电动老虎机集群存储大小从几百gb到5tb不等。

当MySQL的开云体育官方注册网址Debezium连接器第一次启动时,它执行初始的一致性快照,为了保证一致性,它通常获得一个短期的全局读锁,用于捕获所有相关表的模式。由于AWS Aurora不允许执行全局锁定,Debezium必须在整个快照期间单独锁定所有表。开云体育官方注册网址

一个数据库集群的快照可能需要几个小时开云体育电动老虎机到几天的时间,这是我们无法承受的,因为它需要在给定集群上托管的所有客户实例停机。幸运的是,我们偶然发现了这篇伟大的文章开云体育官方注册网址Debezium MySQL Snapshot For AWS RDS Aurora From Backup SnaphotData Guy的文章描述了一个解决方案,允许我们在不导致任何应用程序停机的情况下对所有数据进行快照。我们实现了一个shell脚本,它克隆数据库集群,在binlog中记录克隆的位置,获取克隆的快开云体育电动老虎机照,然后重新配置连接器以从快照的位置开始流。

实例生命周期管理

SugarCloud是一个非常动态的环境。一旦将客户数据库部署到其中一个集开云体育电动老虎机群,就不能保证它在整个生命周期内都保持在那里。支持开云体育电动老虎机对数据库进行备份和恢复。它可以在同一AWS区域的集群之间移动,以实现负载平衡。如果客户要求,它可以从一个AWS区域移动到另一个AWS区域。

我们的源连接器被配置为从给定集群上的所有数据库捕获所有数据更改,但从数据消费者的角度来看,并非所有更改都有意义。开云体育电动老虎机例如,当从不同集群上的备份恢复数据库时,m开云体育电动老虎机ysqldump生成的INSERT语句并不表示新行。它们表示备份期间数据库的状态,应该忽略。开云体育电动老虎机

为了支持原始数据的后处理,每个集群上都有一个系统数据库,集群管理系统在其中记录与实例生命周期相关的所有事件(请参阅开云体育电动老虎机发件箱模式).

为了根据生命周期事件对原始数据进行后处理,我们构建了一个Kafka Streams应用程序,部署在Debezium和实际数据消费者之间。开云体育官方注册网址在内部,它使用一个状态存储,它是每个客户数据库状态(活动/维护)的有效投影。开云体育电动老虎机在从SQL转储恢复数据库之前,数据库被标记开云体育电动老虎机为“在维护中”(事件被发送到发件箱),因此所有相应的insert都被忽略,直到维护结束(另一个事件被发送)。

存储

存储所有历史数据的需求带来了拥有足够存储空间的挑战。自去年年底以来,我们已经收集了超过120TB的压缩CDC事件。目前,我们将历史数据存储在S3中,但计划在S3支持的分级存储(kip - 405)可在AWS MSK中使用。

基础设施

我们主要在Kubernetes上运行我们的软件,并管理所有与kafka相关的基础设施,而不是broker本身Strimzi.Strimzi不仅允许使用相同的工具管理应用程序和Kafka资源,它还为自动化提供了一个很好的基础。

当我们开始设计数据流平台时,其中一个要求是它应该自动调整以适应SugarCloud的某些变化。例如,当部署一个新的Aurora集群时,应该为该集群部署数据流管道。另一个需求是管道应该部署在多个AWS区域,并通过Sugar的单一控制平面(代号为Mothership)进行管理。我们更进一步,构建了Mothership Operator,作为管理管道的API。

当创建一个新的极光集群时,Mothership会在Vault中创建一个带有数据库凭据和StackIngestor的秘密。开云体育电动老虎机StackIngestor包含关于Aurora集群的信息:它的AWS区域、MySQL端点、Vault秘密的名称和其他技术信息。Mothership Operator订阅StackIngestors中的更改,并管理实现管道的Kafka资源。

除了一些例外,每个管道都部署到Aurora集群所在的同一个AWS区域。每个区域都部署了Strimzi Topic和Cluster操作符。该管道由几个Kafka主题、一个源连接器(Debezium)、一个接收器连接器(S3)组成,并运行在共享或专用的Kafka Con开云体育官方注册网址nect集群上。对于在主区域中创建的每个StackIngestor, Mothership Operator在区域Kubernetes集群中创建所需的Strimzi资源。Strimzi操作符订阅其资源中的更新,并在Kafka中管理相应的资源。

图1。系统概述

我们还使用Strimzi将JMX指标从Debezium导出到Prometheus。开云体育官方注册网址普罗米修斯度量在Grafana中是可视化的。我们从一个社区开始指示板(也是由The Data Guy编写的),并对其进行了改进,以更好地适应多租户用例。

图2。多租户Debezium仪表开云体育官方注册网址盘

您不仅使用了Debezium,而且还为项目做开云体育官方注册网址出了贡献。你是怎么做的?

根据我的经验,无论我接触的是什么开源软件——无论是在工作中还是在娱乐中——我总是会在软件中发现一些需要改进的地方,以支持我的用例。

我为Debezium(或者更准确地说,为它的依赖关系)贡献了我的第一个补丁开云体育官方注册网址mysql-binlog-connector-java)。我们刚刚将第一批连接器中的一个推出到生产环境中,遇到了一个问题,即连接器正在消耗所有可用内存,并在binlog中的特定位置崩溃。这个问题非常紧迫,因为在binlog压缩开始之前我们只有非常有限的时间,我们可能会开始丢失数据。同时,我们对Debezium和Kafka Connect架构只有基本的了解,没有Debezium内部的经验。开云体育官方注册网址

整个团队都涌了进来,发现连接器误解了AWS Aurora产生的一个非标准binlog事件,而不是忽略它。故障排除和找到根本原因是最困难的部分。修复问题并进行单元测试相对容易。虽然变化不是那么明显,但我很高兴团队迅速接受了它,并提供了建设性的反馈。

你也在做其他开源的工作吗?

我是最流行的PHP关系数据库库的维护者之一,开云体育电动老虎机教义DBAL.我在那里做出了我的第一个贡献,当时我致力于将库集成到核心SugarCRM产品中,并修复了一些阻碍集成的问题。我花了几个版本才把所有问题都解决了,最后我被邀请加入核心团队。

除此之外,我还偶尔为PHP生态系统中的一些开源项目做贡献:主要是那些我每天都会使用的项目,比如PHPBrew、PHPUnit、PHP_CodeSniffer、Vimeo Psalm和PHP本身。

在Debezium中有什么是你所缺少的或者你希望在未来看到改进的吗?开云体育官方注册网址

虽然Debe开云体育官方注册网址zium是一个很棒的工具,它涵盖了大多数行业标准的数据库平台,但对我们团队来说,最大的挑战之一是将Debezium开云体育电动老虎机扩展到我们的客户基础的大小。SQL Server连接器目前每个连接器只能处理一个逻辑数据库。开云体育电动老虎机我们在SQL Server上托管了数百个客户数据库,但是为开云体育电动老虎机每个数据库运行专用连接器将需要昂贵的基础设施,并且很难管理。

今年早些时候,我们开始与Debezium团队合作改进连接器,使其能够从多个数据库捕获更改并运行开云体育官方注册网址多个任务。开云体育电动老虎机这样,我们可以运行十几个连接器,而不是运行数百个连接器。原始设计概述在DDD-1

实现了这些更改后,我们的一个生产连接器可以从100多个数据库中捕获更改。开云体育电动老虎机与此同时,我们正在努力将更改贡献给上游。

附加问题:数据工程的下一个大事件是什么?

现在,特别是在多租户环境中,很难预测从“它在我的机器上工作”到“它在云规模上工作”需要多长时间。我期待着容器编排和数据流平台变得像在PowerPoint图表上看一样简单。

谢尔盖,非常感谢你抽出时间,很高兴你能来!

如果你想与谢尔盖·莫洛佐夫保持联系并与他讨论,请在下方留下评论或关注并联系他在推特上

贡纳Morling

Gunnar是Decodable的软件工程师,也是一名不折不扣的开源爱好者。多年来,他一直是Debezium的项目负责人。开云体育官方注册网址Gunnar创建了kcctl、JfrUnit和MapStruct等开源项目,并且是Bean验证2.0 (JSR 380)的规范负责人。他在德国汉堡工作。


关于Debe开云体育官方注册网址zium

开云体育官方注册网址Debezium是一个开源的分布式平台,它将现有数据库转换为事件流,因此应用程序几乎可以立即看到并响应数据库中提交的每一个行级更改。开云体育电动老虎机开云体育官方注册网址Debezium是建立在卡夫卡并提供卡夫卡连接监控特定数据库管理系统的兼容连接器。开云体育电动老虎机开云体育官方注册网址Debezium在Kafka日志中记录了数据更改的历史,所以你的应用程序可以在任何时候停止和重新启动,并且可以很容易地使用它没有运行时错过的所有事件,确保所有事件都被正确和完整地处理。开云体育官方注册网址Debezium是开源Apache许可证,版本2.0

参与

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

Baidu
map