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

Debezium社区新年快乐!开云体育官方注册网址

愿你们所有的努力都取得成功,你们的数据保持一致,最重要的是,每个人都安全健康。随着2020年的到来,我认为回顾一下Debezium在过去一年里发生的事情是很好的。开云体育官方注册网址

首先,为你的统计爱好者提供一些事实和数据:

在过去的五年里,Debezium已经成为用于各种数据开云体育官方注册网址库的变更数据捕获的领先开源解决方案。开云体育电动老虎机各行各业的用户都在使用Debezium,比如将数据从运营数据库复制到数据仓库,更新缓存和搜开云体育官方注册网址索索引,通过Kafka Streams或Apache Flink驱动流查询,在微服务之间同步数据等等。开云体育电动老虎机

当与Debezium用户交谈时,开云体育官方注册网址我们通常会收到关于Debezium所支持的应用范围及其灵活性的非常好的反馈:例如,每个连接器可以根据您的特定需求以多种方式配置和微调。大量的指标提供了对Debezium连接器运行状态的深入了解,允许在具有数千个连接器的大型安装中安全操作CDC管道。开云体育官方注册网址

所有这些都是以学习曲线为代价的:刚接触Debezium的用户需要理解不同的选项和设置,并学习在生产环境中运行Debezium的最佳实践。开云体育官方注册网址因此,我们一直在探索如何进一步改善Debezium的用户体验,让人们更容易地设置和操作它的连接器。开云体育官方注册网址

创建新的主题/管道

当你在使用Kafka Connect分布式时,你可能已经意识到,一旦你开始使用Kafka Connect,就已经有一些内部的Kafka Connect相关主题为你创建:

$ kafka-topic .sh——bootstrap-server $HOSTNAME:9092——list connect_configs connect_offset connect_status

这是由Kafka Connect自动完成的,它有一个合理的、自定义的默认主题配置,可以满足这些内部主题的需求。

当你启动一个Debezium连接器开云体育官方注册网址时,被捕获事件的主题是由Kafka代理根据代理中的默认(可能是自定义的)配置创建的Auto.create.topics.enable = true在代理配置中启用:

Auto.create.topics.enable = true default.replication.factor = 1 num.partitions = 1压缩。Type = producer log.cleanup.policy = delete log.retention.ms = 604800000 ## 7天

但通常,当你在生产环境中使用Debezium和K开云体育官方注册网址afka时,你可能会选择禁用Kafka的主题自动创建功能Auto.create.topics.enable = false,或者希望连接器主题的配置与默认值不同。在这种情况下,您必须预先为Debezium捕获的数据源创建主题。开云体育官方注册网址
但也有好消息!从Kafka Connect 2.6.0版本开始,这可以自动完成kip - 158实现了Kafka Connect的自定义主题创建功能。

使用Debezium设置变更数据捕获(CDC)管道通常是一个配置问题,不涉及任何编程。开云体育官方注册网址对CDC设置进行自动化测试仍然是一个非常好的主意,以确保正确配置了所有内容,并且按照预期设置了Debezium连接器。开云体育官方注册网址

这里涉及到两个主要组件,需要考虑它们的配置:

  • 源数据库:开云体育电动老虎机必须设置它以便Debezium可以连接到它并检索更改开云体育官方注册网址事件;具体取决于具体的数据库,例如,MySQL的binlog必须在“开云体育电动老虎机行”模式,Postgres,必须安装一个支持的逻辑解码插件,等等。

  • Debe开云体育官方注册网址zium连接器:它必须使用正确的数据库主机和凭证进行配置,可能使用SSL,应用表和列过滤器,开云体育电动老虎机可能使用一个或多个单个消息转换(smt)等。

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

本文深入讨论了事件来源、命令查询责任隔离(CQRS)、变更数据捕获(CDC)和发件箱模式等领域。这些解决方案的价值将得到迫切需要的澄清。此外,将详细解释两种不同的设计的优点/缺点。

那么为什么所有这些解决方案都很重要呢?它们很重要,因为许多团队正在构建微服务,并将数据分布到多个数据存储中。一个微服务系统可能涉及关系数据库、对象存储、内存缓存,甚至数据的可搜索索引。开云体育电动老虎机数据可能很快丢失、不同步,甚至损坏,因此对关键任务系统造成灾难性后果。

对于许多组织来说,帮助避免这些严重问题的解决方案至关重要。不幸的是,许多重要的解决方案都有些难以理解;事件源、CQRS、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连接器。开云体育官方注册网址

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

第二级缓存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云上提供的一个完全托管的数据流服务。

昨天,我有机会将Debezium和变更数据捕获(CDC)的想法介绍给开云体育官方注册网址Darmstadt Java用户组.这是一个很棒的晚上,有很多有趣的讨论和问题。其中一个问题是:使用基于日志的变更数据捕获工具(如Debezium)与简单地轮询更新记录相比有什么优势?开云体育官方注册网址

首先,这两种方法有什么不同?使用基于轮询(或基于查询)的CDC,您可以重复运行查询(例如通过JDBC)以从要捕获的表中检索任何新插入或更新的行。相比之下,基于日志的CDC通过对数据库日志文件(例如MySQL的binlog或MongoDB的op日志)的任何更改做出反应来工作。开云体育电动老虎机

因为这不是第一次出现这个问题,我想我可以在博客上提供一个更广泛的答案。这样,如果这个问题再次出现,我将来就可以参考这篇文章了:)

废话不多说,下面是基于日志的CDC相对于基于轮询的方法的五个优点。

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

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

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

Baidu
map