Debezium日常分享系列之:Debezium 3.0.0.Beta发布

Debezium日常分享系列之:Debezium 3.0.0.Beta发布

  • 一、重大变更
    • Debezium Server Kafka Sink
    • Debezium Server RabbitMQ Sink
  • 二、新功能和改进
    • 每个表的详细指标
    • PostgreSQL复制插槽创建超时
    • 对于PostgreSQL的PgVector数据类型的支持
    • Oracle Ehcache 事务缓冲实现
    • 解码PostgreSQL逻辑消息的转换
  • 三、更多内容

此版本包含大量新功能和改进,包括每个表的创建、更新和删除的详细指标、复制槽创建超时、PostgreSQL 对 PgVector 数据类型的支持、基于 Ehcache 的新 Oracle 嵌入式缓冲区实现等。

一、重大变更

Debezium Server Kafka Sink

  • 当Kafka代理不可用时,Debezium Server Kafka sink适配器可能会无限期等待。现在,在适配器中添加了一个可配置的超时选项,当达到超时时间时,适配器将强制失败。新的选项debezium.sink.kafka.wait.message.delivery.timeout.ms的默认值为30秒。如果默认值对您的需求不足,请相应地进行调整。

Debezium Server RabbitMQ Sink

  • Debezium Server RabbitMQ sink适配器将所有变更发送到同一个流中。虽然这在某些场景下可能很有用,但它与其他代理系统不太匹配,其他代理系统中每个表都会被流式传输到自己独特的主题或流中。从Debezium 3开始,这个逻辑已经发生了变化,默认情况下,每个表都将被流式传输到自己独特的流中。当设置debezium.sink.rabbitmqstream.stream时,您可以启用将所有变更流式传输到同一个流中的传统行为。

二、新功能和改进

每个表的详细指标

  • Debezium 现在将开始基于每个关系表执行的单个创建、更新和删除操作跟踪指标。对于某些连接器,如 PostgreSQL 和 Oracle,这些新的详细指标还会跟踪每个关系表执行的截断操作。这在需要检测特定变异模式或希望集成分析或可观测性堆栈的情况下非常有用,这些详细信息可以有助于识别问题。
  • 对于升级到 Debezium 3 的用户,这些新指标将自动捕获。它们使用基于映射的模式 Map<‍String, Long‍> 暴露,其中键是表名,值是观察到的事件数量。新的指标名称是 NumberOfCreateEventsSeen、NumberOfDeleteEventsSeen、NumberOfUpdateEventsSeen 和 NumberOfTruncateEventsSeen。

PostgreSQL复制插槽创建超时

  • 当首次部署PostgreSQL连接器时,其中一个最早的任务是在数据库中创建一个复制插槽,如果该插槽不存在。复制插槽是连接器工作的关键,它有助于捕获和发送更改到Debezium。不幸的是,有一些数据库操作会阻塞复制插槽的创建,比如正在进行的事务,强制连接器无限期地阻塞,等待事务结束。对于短暂的事务,这通常不是一个问题;然而,对于长时间运行的事务,情况就完全不同了。
    为了改善这种体验,添加了一个新的内部选项
    internal.create.slot.command.timeout,默认为90秒。如果复制插槽的创建在90秒内没有完成,它将重试slot.max.retries次。一旦重试次数用尽,连接器将抛出一个无法恢复的错误。

对于PostgreSQL的PgVector数据类型的支持

  • pgvector扩展为PostgreSQL引入了矢量搜索功能。该扩展引入了三种数据类型:vector、halfvec和sparsevec。
  • 在Debezium 3中,所有三种数据类型都将像其他数据类型一样进行流式传输。
  • 每种数据类型的发出基于以下语义映射:
    • vector作为数值值的数组
    • halfvec作为数值值的数组
    • sparsevec作为具有维度数量和索引到值的映射的结构体
    • 在启用数据库中的pgvector扩展后,无需进行其他配置。

Oracle Ehcache 事务缓冲实现

  • Debezium 3引入了基于Ehcache的新的Oracle连接器事务缓冲实现,以提供事务处理和事件数据的堆外存储。这个新的实现增加了现有的Java Heap、Infinispan Embedded和Infinispan Remote缓冲类型。
  • 要开始利用Ehcache实现,必须将log.mining.buffer.type设置为ehcache。默认情况下,缓冲类型是memory,以使用JVM的堆获得最佳性能。
  • 为了使Ehcache库成功启动,必须提供几个附加配置来明确配置缓存管理器维护的缓存。这些新的配置选项为:
    • log.mining.buffer.ehcache.global.config
    • log.mining.buffer.ehcache.transactions.config
    • log.mining.buffer.ehcache.processedtransactions.config
    • log.mining.buffer.ehcache.schemachanges.config
    • log.mining.buffer.ehcache.events.config
  • Debezium使用XML创建Ehcache配置,因此这些配置提供XML片段。全局配置是可选的,并允许您提供有关持久性和其他Ehcache属性的详细信息,但不包括指定<‍cache‍>或<‍default-serializers‍>标记,这些标记是单独处理的。其他单个缓存配置旨在提供<‍cache‍>配置标记的内部XML位,但不包括其<‍key-type‍>和<‍value-type‍>,这些由Debezium直接管理。

配置示例

{"log.mining.buffer.type": "ehcache","log.mining.buffer.ehcache.global.config": "<persistence directory=\"./data\"/>","log.mining.buffer.ehcache.transactions.config": "<resources><heap unit=\"entries\">256</heap><disk unit=\"B\">10485760</disk></resources>","log.mining.buffer.ehcache.processedtransactions.config": "<resources><heap unit=\"entries\">256</heap><disk unit=\"B\">10485760</disk></resources>","log.mining.buffer.ehcache.schemachanges.config": "<resources><heap unit=\"entries\">256</heap><disk unit=\"B\">10485760</disk></resources>","log.mining.buffer.ehcache.events.config": "<resources><heap unit=\"entries\">256</heap><disk unit=\"B\">10485760</disk></resources>"
}

在这个示例中,Ehcache将为缓存维护堆和堆外存储的组合,在堆中始终保持最多256个条目,并刷新到磁盘。磁盘缓存将存储在相对路径./data下。这意味着在使用基于磁盘的缓存时,您需要一个可用的持久存储卷。

这是一个新的功能,属于实验性质,因此我们希望您能提供反馈意见,以便我们改进。

解码PostgreSQL逻辑消息的转换

  • PostgreSQL在于您可以通过使用pg_logical_emit_message将逻辑消息直接写入WAL来实现Outbox模式,而无需创建一个outbox表。不幸的是,这些数据随后以一系列字节的形式发送到Kafka,这对于可能正在寻找结构化消息的消费者可能并不总是理想的。
  • Debezium 3引入了一个新的针对PostgreSQL的特定转换,称为DecodeLogicalDecodingMessageContent。该转换的目的是将pg_logical_emit_message事件字节转换为消费者应用程序能够理解的结构化事件负载。

给定以下配置:

{"transforms": "decode","transforms.decode.type": "io.debezium.connector.postgresql.transforms.DecodeLogicalDecodingMessageContent"
}

在转换之前使用 pg_logic_emit_message 写入的事件的事件值将是:

{"op": "m","ts_ms": 1723115240065,"source": {...},"message": {"prefix": "test-prefix","content": "eyJpZCI6IDEsICJpdGVtIjogIkRlYmV6aXVtIGluIEFjdGlvbiIsICJzdGF0dXMiOiAiRU5URVJFRCIsICJxdWFudGl0eSI6IDIsICJ0b3RhbFByaWNlIjogMzkuOTh9"}
}

应用转换后,事件的值现在如下所示:

{"op": "c","ts_ms": 1723115415729,"source": {...},"after": {"id": 1,"item": "Debezium in Action","status": "ENTERED","quantity": 2,"totalPrice": 39.98}
}

因此,您可以安全地实现发件箱模式,而无需物理发件箱表

三、更多内容

更多Debezium技术请参考:

  • Debezium技术专栏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/52774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

滑动窗口元素的平均值 ← STL : deque

【题目描述】 给定一个序列&#xff0c;使用 deque 维护一个大小为 k 的窗口&#xff0c;计算每个窗口中所有元素的平均值。【算法分析】 ● STL deque&#xff1a;https://cplusplus.com/reference/deque/● 在 C 标准模板库&#xff08;STL&#xff09;中&#xff0c;deque&a…

VSCode+debugpy远程调试

某一天突然发现VSCode没法远程调试了&#xff0c;原因竟是新版本的VSCode Python调试不再支持ptvsd插件了&#xff0c;所以只能改换门庭接入debugpy。 首先launch.json并无差异&#xff0c;还是和之前用ptvsd时候一样。 {"version": "0.2.0","config…

【架构设计】安全架构设计

安全架构概述 在当今以计算机、网络和软件为载体的数字化服务几乎成为人类社会赖以生存的手段&#xff0c;与之而来的计算机犯罪呈现指数上升趋势&#xff0c;因此&#xff0c;信息的可用性、完整性、机密性、可控性和不可抵赖性等安全保障有位重要&#xff0c;为满足这些诉求&…

【测试】——开发模型与测试模型

&#x1f4d6; 前言&#xff1a;在软件开发过程中&#xff0c;理解和应用合适的开发模型与测试模型至关重要。本文将详细介绍几种常见的开发模型&#xff0c;如瀑布模型、螺旋模型、增量模型和敏捷过程&#xff0c;以及测试模型如V模型和W模型。 目录 &#x1f552; 1. 开发模型…

Java—可变参数、不可变集合

目录 可变参数 不可变集合 可变参数 Java5 中提供了可变参数&#xff0c;可变参数是一种特殊形参&#xff0c;定义在方法、构造器的形参列表中。 可变参数格式&#xff1a;属性类型...参数名称可变参数示例&#xff1a;int...args 可变参数传参特点 1. 可以不传参数&#…

Nginx: 使用KeepAlived配置实现虚IP在多服务器节点漂移及Nginx高可用原理

使用KeepAlived配置实现虚IP在多服务器节点漂移 1 &#xff09;环境准备 2台 linux , 一主一备 节点1&#xff1a;192.168.184.30 CentOS 7 Master节点2&#xff1a;192.168.184.40 CentOS 7 BackupVIP 192.168.184.50 安装 KeepAlived, $ yum install keepalived 注意&#x…

时空图卷积网络:用于交通流量预测的深度学习框架-1

摘要 准确的交通预测对于城市交通控制和引导至关重要。由于交通流的高度非线性和复杂性&#xff0c;传统方法无法满足中长期预测任务的需求&#xff0c;且往往忽略了空间和时间的依赖关系。本文提出一种新的深度学习框架——时空图卷积网络(STGCN)来解决交通领域的时间序列预测…

云同步的使用

云同步技术是一种在多个设备或系统之间保持数据一致性的技术&#xff0c;它通常依赖于云存储服务来实现。在Java中&#xff0c;实现云同步功能通常需要与云服务提供商的API进行交互&#xff0c;如Amazon S3、Google Cloud Storage、Microsoft Azure Blob Storage等。 以下是一个…

golang gin template模板渲染

1、根据值控制html元素显示隐藏 main.go package main import ("html/template""net/http""github.com/gin-gonic/gin" ) func main() {r : gin.Default()r.SetFuncMap(template.FuncMap{"greaterThan": func(a, b int) bool {retur…

如何利用chatgpt的提升代码能力

目录 1. 在用python绘图的时候,总是花的时间较长,需要将这些绘图的代码花费时间都记下来吗?还是进行总结、提炼到笔记中,需要的时候复制粘贴并改写?1. 记录与总结并行进行2. 模块化代码3. 性能优化4. 工具与自动化5. 笔记整理6. 复制粘贴与调整2. 利用python进行数据分析的…

PyCharm 自定义字体大小

常用编程软件自定义字体大全首页 文章目录 前言具体操作1. 打开设置对话框2. 设置编辑器字体3. 选择外观字体 前言 PyCharm 自定义字体大小&#xff0c;统一设置为 JetBrains Mono 具体操作 【File】>【Settings...】>【Editor】>【Font】 统一设置为字体样式 JetB…

人工智能训练师工作内容及职业发展路径

人工智能训练师&#xff08;AI Trainer&#xff09;是一种专业职位&#xff0c;主要负责训练和优化人工智能系统&#xff0c;尤其是机器学习模型。他们的工作涉及到以下几个方面&#xff1a; 1、数据准备&#xff1a;训练师需要收集、清洗和预处理数据&#xff0c;以确保数据的…

C++ | Leetcode C++题解之第355题设计推特

题目&#xff1a; 题解&#xff1a; class Twitter {struct Node {// 哈希表存储关注人的 Idunordered_set<int> followee;// 用链表存储 tweetIdlist<int> tweet;};// getNewsFeed 检索的推文的上限以及 tweetId 的时间戳int recentMax, time;// tweetId 对应发送…

简易STL实现 | Deque的实现

一种 在内存中存储元素的数据结构&#xff0c;它支持 在两端添加和删除元素&#xff08;使用循环数组实现&#xff09; 1、deque的特性&#xff08;分段deque实现&#xff09; 1、双端操作&#xff1a; deque支持在前端和后端执行快速的插入和删除操作 2、随机访问&#xff…

世界上装机量最大的数据库SQLite,低调但不小众

&#x1f389; 大家好&#xff0c;我是你们的数据小侦探&#xff0c;今天咱们不聊那些炫酷的AI黑科技&#xff0c;也不深挖大数据的深邃眼眸&#xff0c;咱们来聊聊一位数据库界的“低调奢华有内涵”的隐形冠军——SQLite&#xff01;&#x1f451; &#x1f914; 你可能没听过…

文本数据分析-(TF-IDF)(2)

文章目录 一、TF-IDF与jieba库介绍1.TF-IDF概述2.jieba库概述 二、TF-IDF与jieba库的结合1.结合2.提取步骤 三&#xff0c;代码实现1.导入必要的库读取文件&#xff1a;3.将文件路径和内容存储到DataFrame4.加载自定义词典和停用词5.分词并去除停用词 TF-IDF&#xff08;Term F…

Servlet 简介+ Cookie和session+过滤器Filter和监听器Listener

目录 1.Servlet 介绍 1.1 什么是Servlet 1.2 Servlet的使用方法 1.3 Servlet接口的继承结构 2.Servlet的生命周期 2.1 servlet生命周期中重要的方法 3.获得前端提交数据 4.中文乱码的解决方案 5.重定向和转发 5.1 重定向 5.2 转发 6. Request对象 7. Response对象…

Linux上启动redis

1.默认启动方式:在系统的任意位置执行 redis-server即可启动 ps:这是前端界面启动&#xff0c;无法直接连接redis&#xff0c;想要连接的话只能另外启动一个窗口&#xff0c;因此下面我们介绍后台启动redis 2.指定配置启动&#xff1a; redis的配置文件位置&#xff1a…

华为手机数据丢失如何恢复?

在智能手机普及的今天&#xff0c;华为手机凭借其卓越的性能和用户体验赢得了众多用户的青睐。然而&#xff0c;在使用过程中&#xff0c;我们难免会遇到数据丢失或误删除的情况。面对这一困境&#xff0c;许多用户可能会感到束手无策。别担心&#xff0c;本文将为你提供一份全…

FastGPT:利用大模型重新定义传统知识库

引言 传统知识库的痛点 传统知识库广泛应用于企业文档管理、客户支持等场景&#xff0c;但随着信息量和复杂度的增加&#xff0c;存在以下显著问题&#xff1a; 数据难整合&#xff1a; 结构化与非结构化数据分散&#xff0c;更新维护成本高。检索不精准&#xff1a; 依赖关…