Debezium 团队激动地宣布 Debezium 2.2 的第一个候选版本 Debezium 2.2.0.CR1

此版本主要专注于稳定性和错误修复;但也有一些新功能和重大更改。在此版本中,Debezium 迁移到了 Quarkus 3.0.0.Final,对 Debezium Server Pulsar sink 进行了性能改进,Jolokia 可以在 Debezium 的 Kafka Connect 容器镜像中启用,为 MongoDB 多副本和分片集群提供了增量快照的孵化支持,以及弃用了 Docker Hub 的镜像用法。

让我们花点时间深入了解其中一些内容以及它对未来的意义!

升级到 Quarkus 3

Quarkus 是一个 Kubernetes 原生 Java 栈,它结合了最佳的 Java 库来创建快速、低占用的应用程序。Debezium Server 运行时也基于 Quarkus,Debezium UI 的一部分也同样如此。此外,Debezium Outbox 扩展也基于 Quarkus 平台。

升级到 Quarkus 3 带来了一些改进,包括使用最新的稳定版本的各种 Java 库,以及从 Java EE 迁移到 Jakarta EE。如果您不熟悉这次迁移,以前大多数 Java EE 平台类都打包在 javax.* 包中。在过去一两年里,越来越多的应用程序开始从 JavaEE 或 J2EE 迁移到 Jakarta EE,Quarkus 3 标志着这一过渡时期。总的来说,唯一的真正变化是以前位于 javax.* 中的类现在被放置在 jakarta.* 中。

如果您的应用程序使用了 Debezium Quarkus Outbox 扩展,请注意,为了使用 Debezium 2.2 和 Quarkus,您需要迁移到 Quarkus 3。这也意味着,如果您想利用 Outbox 扩展处理响应式数据源,也将需要使用 Quarkus 3。

最后,如果您正在为 Debezium Server 开发或维护 Sink 适配器,您还需要调整使用新的 Jakarta EE 注解,而不是旧的 Java EE 注解。

Debezium Server Pulsar 更改

在之前的 Debezium Server Pulsar Sink 版本中,适配器利用 send() 方法以同步方式传递消息。虽然这对于发送一次性消息来说可行,但由于该方法会依次等待发送操作的确认,因此有引入连接器延迟的可能。由于 Debezium Server Sink 适配器提供了一系列要传递的事件,同步的性质表现不佳。

从 Debezium 2.2 开始,Pulsar Sink 将使用 sendAsync() 异步地将事件批次传递给 Pulsar,从而大幅提高整体吞吐量。虽然批次中的每个事件都是异步传递的,但适配器只有在当前批次获得全部确认后才会继续处理下一个批次。

Jolokia 支持

Jolokia 是一个 JMX-HTTP 桥,它提供了一种替代 JSR-160 的方法来收集指标。它是一种基于代理的方法,通过引入批量请求和细粒度安全策略等独特功能来改进传统的 JMX。

在 Debezium 2.2 中,debezium/connect 镜像现在预装了 Jolokia,但默认情况下并未启用此代理。要启用 Jolokia 支持,必须使用 ENABLE_JOLOKIA 设置为 true 来启动容器。默认情况下,Jolokia 启用后将绑定到端口 8778。

如果需要不同的端口,则需要以不同的方式启用 Jolokia。例如,要使用端口 9779 启用 Jolokia,请不要设置 ENABLE_JOLOKIA,而是按如下方式配置 KAFKA_OPTS 环境变量

-e KAFKA_OPTS="-javaagent:$(ls "$KAFKA_HOME"/libs/jolokia-jvm-*.jar)=port=9779,host=*"

通过指定上述环境变量,Jolokia 的 JMX-HTTP 桥将在容器的端口 9779 上可用。

启动容器时,请不要忘记将 Jolokia 端口添加到容器的已公开端口列表中。

Docker Hub 弃用

Docker 最近宣布缩减其免费组织账户的提供,许多开源社区(包括 Debezium)都依赖于此。不幸的是,根据其规则,Debezium 不符合条件。

尽管 Docker 选择撤销了他们的决定,但 Debezium 团队认为我们需要一条稳健的前进道路,以确保我们的镜像能够不受干扰地提供给我们的社区。Debezium 已经与 docker.ioquay.io 双重发布了一段时间,并且我们将继续为 Debezium 2.2.0.Final 和所有 Debezium 2.3 **预览**版本这样做。

我们计划在接下来的几天发布一篇详细的博客文章。在此期间,所有用户都应尽快计划迁移到 quay.io,以避免在获取更新的 Debezium 版本时出现中断。

其他修复

此版本中还有许多其他改进、错误修复和稳定性更改,其中一些值得注意的包括

  • 升级 Debezium UI 的依赖项(Quarkus 等)DBZ-4109

  • 可重试的操作失败将无限次重试 DBZ-4488

  • UI - 添加 UI 来配置连接器的其他属性 DBZ-5365

  • 跨 MongoDB 分片按顺序捕获事件 DBZ-5590

  • DDL 事件未存储在排除表的 schema history topic 中 DBZ-6070

  • Oracle 路径使用的当前 batchSize 计算 end scn 是错误的,需要使用 min batch size DBZ-6155

  • 升级 UI 构建以使用 Debezium 2.2 或最新版本 DBZ-6173

  • Oracle-Connector dbz##user 需要更多权限 DBZ-6198

  • 将 quay.io 设置为主要镜像仓库 DBZ-6216

  • example-postres 的多平台构建失败 DBZ-6258

  • 将 protoc 版本属性添加到 postgres 连接器 pom.xml DBZ-6261

  • 传递 kafka topic/配置的配置 DBZ-6262

  • Postgres 连接器在仅快照时不需要逻辑 WAL 级别 DBZ-6265

  • 更新 RHEL 部署说明中的配置属性 DBZ-6266

  • MySQL 连接器在仅快照时不需要查询 binlog DBZ-6271

  • 使用 Infinispan 缓存作为事务缓冲区时,带空格的表名无法正确反序列化 DBZ-6273

  • Oracle 测试使用的 Infinispan 缓存配置与 Infinispan 14.0.2 不兼容 DBZ-6274

  • 使用 Infinispan 缓存和 LOBs 时,事务缓冲区状态可能会损坏 DBZ-6275

  • 启用 Spanner 连接器中可配置的 Docker 标签 DBZ-6302

  • 将 MySQL JDBC 驱动程序升级到 8.0.32 DBZ-6304

  • 允许在 MongoDB testcontainers 实现中指定 Docker 镜像引用 DBZ-6305

  • 在 ConnectorConfiguration 类中使用 MongoDbContainer 而不是 MongoDBContainer test containers 类 DBZ-6306

  • DDL 语句无法解析 - Oracle 连接器 2.1.3.Final DBZ-6314

  • 无法解析的 DDL 语句(MySQL/MariaDB)DBZ-6316

  • 移除关于 Oracle SYS 用户账户的过时信息 DBZ-6318

  • Cassandra 3 无法使用 JDK20 构建 DBZ-6320

  • 将 Jolokia 打包到 Debezium connect 镜像中 DBZ-6323

展望与下一步?

我们即将完成 Debezium 2.2 的发布周期,最终版本预计在本周发布。如果还有任何未解决的 bug 或问题,请联系我们,以便在最终版本发布前得到解决。

Debezium 团队正在将重点转移到 Debezium 2.3。Debezium 2.3 版本将是一个更加精简和集中的版本,我们的目标是在六月下旬发布。Debezium 的路线图已更新,并且本季度计划了以下功能:

  • 支持可配置的信号通道

  • 支持一次性投递语义(第一阶段)

  • Debezium Server 的 Kubernetes Operator

  • Oracle OpenLogReplicator 适配器概念验证 / 孵化实现

  • Debezium UI 改进

我们希望听到您的反馈或建议,如果您有任何想分享的内容,请务必通过 邮件列表 或我们的 聊天 与我们联系。

下次再见,让变化继续流动……​

Chris Cranford

Chris 是 IBM 的一名软件工程师,之前在 Red Hat 工作,他致力于 Debezium 项目,并每天都在深入研究 Oracle 和 Change Data Capture 的各个方面。他此前曾从事 Hibernate(领先的开源 JPA 持久化框架)方面的工作,并且继续为 Quarkus 做贡献。Chris 居住在美国北卡罗来纳州。

   


关于 Debezium

Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。

参与进来

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

版权所有 © Debezium 及其作者。保留所有权利。有关我们的商标详情,请访问我们的 商标政策商标列表。第三方商标属于其各自所有者,在此提及并不表示任何认可或关联。
×