我们开发了一个Debezium连接器用于开云体育官方注册网址Db2现在可以作为Debezium孵化器的一部分使用。开云体育官方注册网址在这里,我们将描述变更数据捕获(CDC)的用例、Db2生态系统中已经存在的各种方法,以及我们如何使用Debezium。开云体育官方注册网址此外,我们还改进了实现Db2 Debezium连接器的方法。开云体育官方注册网址

背景:将数据引入数据湖

2016年,IBM开始努力构建一个单一平台,IBM的企业数据可以在其上被摄取、管理和处理:认知企业数据平台(CEDP).IBM Research是这个项目的主要贡献者之一。其中一项基本活动是将数据从地理上分布的数据中心引入平台。的摄取到数据湖使用各种各样的技术。

图1。逻辑架构

这些企业数据的很大一部分收集在现有数据仓库和数据集市中存在的关系数据库中。开云体育电动老虎机这些通常是生产系统,其主要用途是作为营销、销售、人力资源等的“记录系统”。由于这些系统是由IBM为IBM运行的,因此它们主要是IBM Db2的一些变体。

高效地从Db2获取数据

数据被摄取到一个不可变的着陆区域内的数据。这个着陆区域是作为一个HDFS实例实现的。流数据,例如新闻,使用Kafka从源文件中移动,然后使用适当的连接器写入HDFS。

我们的主要设计目标之一是自动化。每天要摄取来自200多个不同来源的5000多个关系数据库表。开云体育电动老虎机为了扩展数据处理平台(除了允许数据所有者将数据带到平台的治理过程之外),摄取本身必须是自助服务的。

最初关系数据总是使用批量从源加载Sqoop.提供一个REST接口,以便数据所有者可以配置何时应该移动数据,例如定期,触发事件等。Sqoop摄取是一组分布式任务,每个任务都使用JDBC连接来读取关系数据库表的一部分,生成基于文件的数据表示,例如。开云体育电动老虎机拼花,然后存储在HDFS上。使用Sqoop,我们可以完全刷新数据,或添加到它不能增量修改数据。

从实际的角度来看,这限制了数据更新的周期性。一些较大的表代表数十gb的压缩拼花。虽然Sqoop允许对同一个表并行运行多个任务,但瓶颈通常是跨WAN的网络和/或源数据库系统本身的速率控制。开云体育电动老虎机在任何特定的一天,通常只有一小部分表被修改,这意味着大量不必要的数据被发送。

为了解决这些问题,我们引入了使用变更数据捕获(CDC)来跨WAN移动数据。在CDC模式下摄取为从未修改过的文件设计的存储系统是有问题的。而最近的一些作品Deltalakes蜂巢3.0我们已经开始在Hadoop生态系统中引入增量变化,这些变化还不够成熟,不能满足我们的需求。

作为一种替代方案,我们使用关系数据库删除区(Relational Database Drop Zone)的开云体育电动老虎机概念,数据所有者可以在其中实例化他们的数据库的阴影,然后从中摄取到HDFS。由于Drop Zone和Landing Zone位于同一个数据中心,并且数据的摄取是一个高度可并行的任务,因此大型表的实际摄取通常比从源传输数据快几个数量级。

数据所有者可以使用任何他们喜欢的工具将数据移动到他们的Drop Zone。特别是它们可以转移变化通过CDC获得的数据。

CDC系统几乎和关系数据库本身一样古老。开云体育电动老虎机通常,它们是为备份或故障恢复而设计的,供数据库管理员使用。开云体育电动老虎机

Db2已经有40多年的历史了,它运行在广泛的操作系统上,包括zOS、AIX、Linux和Windows。它为CDC开发了一套不同的工具,用于不同的上下文中。我们开始探索IBM的应用SQL复制.一旦管理员将表放入CDC模式,就会启动一个捕获代理,从事务日志中读取对这些表所做的更改。更改存储在专用的CDC表中。在远程数据库中,应用程序代理开云体育电动老虎机定期从这些CDC表中读取更改并更新影子表。

虽然这在概念上很简单,但由于以下原因很难实现自动化:

  • 源和接收是紧密耦合的,因此不能轻易地将同一个表复制到多个不同的目标数据库系统。开云体育电动老虎机

  • 如果源系统已经在表上使用复制,例如用于备份目的,则不能使用此方法复制到Datalake。

  • 源上需要提升的权限。数据所有者为Sqoop提供了对系统的读访问权,但是给管理员带来了遵从性问题。

  • 接收器上需要提升的特权。为了简单起见,我们的Drop Zone是一个单独的Db2系统,每个数据源都有数据库实例。开云体育电动老虎机允许数据所有者设置SQL Replication to Drop Zone将允许他们访问彼此的实例,这是违反法规的。

  • 这些工具是为系统管理员设计的,因此有大量的陷阱给粗心的人。例如,在选择广泛的参数时必须谨慎,例如:事务日志允许CDC的模式、上一次备份的时间、数据库是面向行还是面向列等等。开云体育电动老虎机

  • 它是特定于db2的解决方案;虽然大多数关系数据源是Db2,但我们也有Netezza、MySQL和SQL Server数据源。

我们在实践中发现,上述情况的结合意味着允许数据所有者使用IBM SQL Replication作为Datalake的CDC机制是不切实际的。

IBM提供了另一组数据复制工具,称为IBM InfoSphere data replication (IIDR).它作为不同于Db2的产品出售。IIDR不是特定于Db2的解决方案,它适用于各种关系数据库以及非关系数据存储系统,例如文件系统。开云体育电动老虎机IIDR本质上有源剂和汇剂。源和接收代理运行在目标系统上或靠近目标系统。源代理读取更改并通过广泛的协议(包括TCP套接字、MQ、共享文件等)将其传播到接收代理。源和接收器代理是通过一个名为Access Server的实体配置的,源通过Access Server连接到接收器,并指定要捕获的表。访问服务器本身通常由系统管理员通过图形用户界面进行控制。

因此,例如,我们可以有一个Db2源代理和一个IIDR Kafka接收器代理,其行为类似于标准的Apache Kafka Connect源连接器,即它将更改事件写入Kafka主题。初始记录是Upsert消息(REFRESH阶段),后续更改作为Upsert/Delete消息序列(MIRROR阶段)传播。

IIDR使系统更加松散耦合,不那么特定于Db2。然而,实现自动化仍然不容易。实际上,我们需要允许数据所有者通过REST调用指定源数据库系统和要复制的表,并在Kubernetes集群上自动配置和部署必要的代理和Access S开云体育电动老虎机erver。由于我们不能在源系统本身上运行,所以我们将远程Db2系统编目为本地系统,并在其上运行代理。

IIDR假设代理运行在与关系数据库系统相同的硬件体系结构上。开云体育电动老虎机IIDR代理使用低级别Db2 API读取事务日志。我们的许多源系统运行在AIX/PowerPC上,而部署代理的Kubernetes平台运行在Linux/Intel上。这会导致字节顺序兼容性问题。

这种方法有两个局限性:

  • IIDR被设计为由系统管理员监视和管理。试图通过解析这些日志的脚本捕获管理员的操作和响应,并试图在IIDR中对失败做出反应,这是非常脆弱的。只要没有任何错误行为,系统就可以正常运行,但如果出现故障(网络中断、Kubernetes代理故障、LDAP宕机等),几乎不可能自动执行适当的响应。

  • 虽然尽可能少地接触源系统是一个令人钦佩的目标,但从实际的角度来看,在生产系统上独立于源系统运行CDC系统几乎是不可能的。如果系统管理员从备份中重新加载一个旧版本的表,或者从根本上改变了该表的DDL, CDC系统必须意识到发生了这种情况,并采取适当的措施。在更改DDL的情况下,将创建一个新版本的表,因此必须依次创建一个新版本的KTable。

在尝试使用上述方法对实际生产系统使用CDC时,我们看到了这些问题和更多问题。我们得出的结论是,CDC系统和源系统的管理不能独立完成,而且在很大程度上,我们的问题来自于试图将IIDR用于一个它并不打算用于的用例。

实现Debezium Db2连接器的方法开云体育官方注册网址

当Debe开云体育官方注册网址zium可用时,我们开始评估它是否符合我们的目的。由于它适用于广泛的关系数据库系统,并且是开源的,我们可以想象,数据库管理员将允许使用它为开云体育电动老虎机下游应用程序生成数据的表示。本质上,Debezium系统将成为开云体育官方注册网址数据库源系统的扩展。开云体育电动老虎机开云体育官方注册网址Debezium不需要生产相同的数据库表的副本(不像II开云体育电动老虎机DR或SQL Replication)。通常,下游应用程序用于辅助任务,即分析,而不是用于故障转移,这意味着诸如保存精确类型之类的问题不那么紧迫。例如,如果时间戳字段在Elasticsearch中表示为字符串,这并不是世界末日。

对于Debezium,我们唯一担心的是它没有Db2连接器。开云体育官方注册网址

出现了两种方法:

  • 使用低级Db2 API像IIDR那样直接读取事务日志。

  • 使用SQL Replication CDC捕获表使用SQL读取捕获表。

对代码的调查得出结论,该模型已被使用现有的连接器SQL Server可以在很大程度上用于Db2。从本质上讲:

  • 用于轮询更改的SQL查询是不同的

  • 逻辑序列号(LSN)的结构和性质是不同的

  • Db2区分数据库系统和数据库,而SQL Server不需要考虑这一点。开云体育电动老虎机

否则,其他所有东西都可以重用。因此,我们调整了现有的SQL Server代码库来实现Db2连接器。

未来的工作/扩展

基准测试

Db2和SQL Server的连接器使用轮询模型,即连接器定期查询CDC表,以确定自上次轮询以来发生了什么变化。一个自然的问题是,考虑到轮询本身是有成本的,什么是“最佳”轮询频率,即延迟和负载之间的权衡是什么?

我们感兴趣的是为系统基准测试构建一个通用框架,以便更好地了解在延迟、CDC系统的吞吐量和源系统负载方面的权衡。

Db2通知系统

与其为Db2构建轮询连接器,还可以创建通知系统。我们考虑过这一点,但认为轮询连接器对于第一个实现来说更简单。

为Db2构建通知连接器的一种方法是:

  • 通过使用OS文件系统监视器(Linux或Windows)来识别更改事件。这可以监视Db2数据库的事务日志目录,并在修改或创建文件时发送事件。开云体育电动老虎机

  • 方法读取实际表变化,从而确定事件的确切性质db2ReadLog API.原则上,这个API可以作为服务远程调用。

  • 通过SQL连接确定相关的Db2数据结构,例如表DDL。

Debe开云体育官方注册网址zium事件驱动的Db2连接器将等待通知,然后通过db2ReadLog和SQL读取实际的更改。这将要求监控器代理在数据库系统上本地运行,与捕获服务器类似。开云体育电动老虎机

DML vs DDL的变化

更改数据捕获(CDC)系统通过数据操作语言(DML)操作(如INSERT、DELETE等)在源表上传播修改。它们不会显式地处理通过数据定义语言(DDL)操作(如TRUNCATE、ALTER等)对源表所做的更改。当发生DDL更改时,Debezium应该采取什么行为还不清楚。开云体育官方注册网址我们正在探索Debezium模型应该如何应对这类变化。开云体育官方注册网址

结论

虽然假设新的企业数据系统完全从零开始构建是很有吸引力的,但在相当长的一段时间内,几乎肯定有必要与现有的关系数据库系统进行交互。开云体育电动老虎机开云体育官方注册网址Debezium是一个很有前途的框架,用于将现有的企业数据系统连接到Datalakes等数据处理平台。我们目前在IBM研究院的工作重点是构建以Kafka和Debezium为核心组件的混合云数据编排系统。开云体育官方注册网址

Luis Garces-Erice

Luis是IBM研究院苏黎世实验室的分布式系统研究人员。

肖恩·鲁尼

Sean Rooney是IBM苏黎世研究院的研究人员,他在那里从事混合云系统的工作。

彼得Urbanetz

Peter是苏黎世IBM研究院的软件工程师


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

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

参与

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

Baidu
map