开云体育官方注册网址Debezium博客

这篇文章是一个由三部分组成的系列文章的一部分,探索如何使用Debezium使用Oracle LogMiner开云体育官方注册网址从Oracle数据库中摄取更改。开云体育电动老虎机如果您错过了它,本系列的第一部分是在这里

在第二部分中,我们将在第一部分的基础上,使用Zookeeper、Kafka和Kafka Connect部署Oracle连接器。我们将讨论连接器的各种配置选项,以及它们为何如此重要。最后,我们将看到连接器的实际操作!

这篇文章是一个由三部分组成的系列文章的一部分,探索如何使用Debezium使用Oracle LogMiner开云体育官方注册网址从Oracle数据库中摄取更改。开云体育电动老虎机在本系列文章中,我们将研究为Debezium for Oracle建立概念验证(POC)部署的所有步骤。开云体育官方注册网址我们将讨论设置和配置以及多租户的细微差别。我们还将深入了解您可能需要了解的任何已知陷阱和关注点,以及如何调试特定的问题。最后,我们将讨论维护健康连接器部署所需的性能和监视。

在整个练习过程中,我们希望向您展示为Oracle部署Debezium是多么简单。开云体育官方注册网址本系列的安装和设置部分可能看起来相当复杂,但其中许多步骤可能已经存在于预先存在的环境中。我们将深入研究每一个步骤,解释使用容器映像部署的必要性。

Apache Kafka 2.8允许第一次看到zookeeper的未来,广泛使用的事件流媒体平台:发货预览kip - 500(“用自管理元数据仲裁替换ZooKeeper”),你现在可以运行Kafka集群,而不需要设置和操作Apache ZooKeeper。这不仅从操作的角度简化了Kafka的运行,新的元数据仲裁实现(命名为“KRaft”,Kafka Raft元数据模式)也应该提供更好的扩展特性,例如当涉及到大量的主题和分区时。

卡夫卡流是一个基于Apache Kafka开发流处理应用程序的库。引用它的文档,“Kafka Streams应用程序通过拓扑实时地记录流,连续地、并发地、逐条记录地处理数据”。Kafka Streams DSL提供了一系列流处理操作,如映射、过滤、连接和聚合。

Kafka流中的非键连接

开云体育官方注册网址Debezium的CDC源连接器可以很容易地捕获数据库中的数据变化,并将它们近实时地推向Elasticsearch等接收器系统。开云体育电动老虎机默认情况下,这将导致源数据库中的表、对应的Kafka主题和接收器端的数据表示(例如Elasticsearch中的搜索索引)之间的1:1关系。开云体育电动老虎机

在1:n关系的情况下,比如在一个客户表和一个地址表之间,消费者通常对数据的视图感兴趣,它是一个嵌套的数据结构,例如,一个Elasticsearch文档表示一个客户和他们所有的地址。

这就是kip - 213(“Kafka改进方案”)和它的外键连接能力进来了:它在Apache卡夫卡2.4“缩小流中的KTables和关系数据库中的表之间的语义差距”。开云体育电动老虎机在KIP-213之前,为了连接来自两个Debezium更改事件主题的消息,通常必须手动重新输入至少一个开云体育官方注册网址主题的密钥,以确保在连接的两端使用相同的密钥。

多亏了KIP-213,这不再需要了,因为它允许在从Kafka消息值中提取的字段中连接两个Kafka主题,以完全透明的方式自动处理所需的重键。比较,以前的方法,这大大减少了从Debezium的CDC事件创建聚合事件的工作量。开云体育官方注册网址

发件箱是在我电子邮件客户端的那个文件夹里吗?不,不完全是,但有一些相似之处!

术语发件箱描述了允许独立组件或服务执行的模式读自己写的语义,同时为那些跨组件或服务边界的写操作提供可靠的、最终一致的视图。

你可以在我们的博客文章中阅读更多关于发件箱模式以及它如何应用于微服务的内容,使用发件箱模式进行可靠的微服务数据交换

那么到底什么是发件箱事件路由器?

在De开云体育官方注册网址bezium 0.9.3版本中。最后,我们介绍了一个现成的工具单个消息转换(SMT),它构建在发件箱模式上,使用Debezium和Kafka传播数据更改事件。开云体育官方注册网址请参阅文档有关如何使用此转换的详细信息。

作为最近的跟进使用变更数据捕获和流处理构建审计日志文章中,我们想用管理特性扩展这个示例,以便能够捕获和修复任何丢失的事务数据。

在上面提到的博客文章中,有一个日志丰富器服务用于将在Vegetable数据库表中插入或更新的数据与事务上下文数据结合起来,例如开云体育电动老虎机

  • 事务id

  • 执行该工作的用户名

  • 实际变更背后的用例。“创建蔬菜”

只要所有的变化都是通过蔬菜服务来完成的,这一切都很好。但情况总是这样吗?

那么直接在数据库级别上执行的维护活动或迁移脚本呢?开云体育电动老虎机现在仍然有很多这样的活动在进行,或者是故意的,或者是因为那是我们试图改变的旧习惯……

让我们来谈谈TOAST。烤面包吗?不,烤面包!

那是什么?烤面包(超大属性存储技术)是Postgres中的一种机制,它将大列值存储在多个物理行中,绕过了8kb的页面大小限制。

烤面包!

通常,TOAST存储对用户是透明的,所以您实际上不必关心它。但是有一个例外:如果表行发生了变化,则为any不变使用TOAST机制存储的值不包含在Debezium从数据库接收到的消息中,除非它们是表的一部分开云体育官方注册网址开云体育电动老虎机副本的身份。因此,这样不变的TOAST列值将不会包含在Debezium数据更改事件发送到Apache Kafka。开云体育官方注册网址在这篇文章中,我们将讨论处理这种情况的不同策略。

维护某种形式的审计日志是业务应用程序的常见需求,即对应用程序数据的所有更改进行持久跟踪。如果你仔细观察,带有Debezium数据更改事件的Kafka主题与此非常相似:它开云体育官方注册网址来自数据库事务日志,描述了应用程序记录的所有更改。开云体育电动老虎机但是缺少的是一些元数据:为什么、什么时候以及由谁更改了数据?在这篇文章中,我们将探索如何通过变更数据捕获(CDC)提供和公开元数据,以及如何使用流处理来丰富实际的数据变更事件。

这是Apache脉冲星PMC成员和提交者翟佳的客座文章。

开云体育官方注册网址是一个用于变更数据捕获(CDC)的开源项目。它是建立在Apache Kafka Connect支持MySQL、MongoDB、Postgr开云体育电动老虎机eSQL、Oracle、SQL Server等多种数据库。Apache脉冲星包括一套内置连接器基于Pulsar IO框架,是Apache Kafka Connect的对应部分。

从2.3.0版本开始,Pulsar IO支持开云体育官方注册网址Debezium源连接器因此,您可以利用Debezium将数据库中的更改流到Apache Pul开云体育官方注册网址sar中。开云体育电动老虎机本教程将引导您使用Pulsar IO为MySQL设置Debezium连接器。开云体育官方注册网址

上周的公告Quarkus在Java社区中引起了极大的兴趣:它由最好的Java库和标准精心制作,允许基于GraalVM和OpenJDK HotSpot构建kubernetes原生应用程序。在这篇博文中,我们将演示一个基于夸克的微服务如何通过Apache Kafka使用Debezium的数据更改事件。开云体育官方注册网址出于这个目的,我们将从最近的文章中看到如何转换运输微服务发件箱模式变成基于quarkuss的服务。

作为业务逻辑的一部分,微服务通常不仅需要更新自己的本地数据存储,还需要将发生的数据更改通知其他服务。发件箱模式描述了一种让服务以安全和一致的方式执行这两个任务的方法;它为源服务提供即时的“读自己写的”语义,同时跨服务边界提供可靠的、最终一致的数据交换。

第二级缓存Hibernate ORM / JPA是一种有效的提高应用程序性能的方法:缓存只读或很少修改的实体避免了到数据库的往返,从而提高了应用程序的响应时间。开云体育电动老虎机

与第一级缓存不同,第二级缓存与会话工厂(或者JPA术语中的实体管理器工厂)相关联,因此其内容在事务和并发会话之间共享。当然,如果缓存的实体被修改,相应的缓存条目也必须更新(或从缓存中清除)。只要数据更改是通过Hibernate ORM完成的,就没有什么可担心的:ORM将自动更新缓存。

但是,当绕过应用程序时,比如直接修改数据库中的记录时,事情就变得棘手了。开云体育电动老虎机Hibernate ORM无法知道缓存的数据已经过时,有必要显式地使受影响的项失效。一种常见的方法是使用一些管理功能来清除应用程序的缓存。要使其工作,重要的是不要忘记调用失效功能,否则应用程序将继续使用过时的缓存数据。

在接下来的文章中,我们将探索缓存失效的另一种方法,它以一种可靠的、完全自动化的方式工作:通过使用Debezium及其开云体育官方注册网址变更数据捕获(CDC)功能,您可以跟踪数据库本身的数据更改,并对任何应用的更改做出反应。开云体育电动老虎机这允许以近乎实时的方式使受影响的缓存项失效,而不会有由于遗漏更改而导致数据陈旧的风险。如果一个条目已经从缓存中移除,Hibernate ORM将在下一次请求时从数据库加载该实体的最新版本。开云体育电动老虎机

更新外部全文搜索索引(例如:Elasticsearch)是变更数据捕获(CDC)的一个非常流行的用例。

正如我们在博客一段时间前,Debezium的CDC源连接器和Confluent开云体育官方注册网址的结合用于Elasticsearch的下沉连接器可以直接捕捉MySQL、Postgres等中的数据变化,并将其近实时地推向Elasticsearch。这将导致源数据库中的表和Elasticsearch中相应的搜索索引之间的1:1关系,这对于许多用例来说是非常好的。开云体育电动老虎机

但是,如果您想将整个聚合放入单个索引中,则会变得更具挑战性。一个例子可以是一个客户和他们所有的地址;它们通常存储在RDBMS中两个独立的表中,通过外键链接,而Elasticsearch中只需要一个索引,包含嵌入地址的客户文档,允许您根据地址有效地搜索客户。

跟进KStreams-based解决方案对于我们最近所描述的,我们想在这篇文章中提出一种由应用层驱动的聚合视图的替代方案。

大多数情况下,Debezium被用于开云体育官方注册网址流数据更改Apache卡夫卡。如果你使用的是另一个流媒体平台,比如Apache脉冲星或者基于云的解决方案,例如亚马逊运动Azure事件中心诸如此类?你还能从Debezium强大的变更数据捕获(CDC)功开云体育官方注册网址能中获益,并从数据库(如MySQL、Postgres、SQL Server等)中摄取变更吗?开云体育电动老虎机

事实证明,只需一点胶水代码,就可以!在接下来的文章中,我们将讨论如何使用Debezium捕获MySQL数据库中的更改,并开云体育官方注册网址将更改事件流到Kinesis中,Kinesis是Amazo开云体育电动老虎机n云上提供的一个完全托管的数据流服务。

基于微服务的架构可以被认为是一种行业趋势,因此最近经常出现在企业应用程序中。在多个服务及其备份数据存储之间保持数据同步的一种可能方法是采用一种称为变更数据捕获简称CDC。

从本质上讲,CDC允许监听数据流一端(即数据源)发生的任何修改,并将其作为更改事件传递给其他相关方或将其存储到数据接收器中。建议在数据源和数据接收器之间解耦事件流,而不是以点到点的方式进行此操作。该场景的实现可以基于开云体育官方注册网址而且Apache卡夫卡相对轻松且有效地无需编码。

例如,考虑以下基于微服务的订单管理系统架构:

Baidu
map