升级到 Debezium Postgres Connector v2.0.1 导致架构不兼容问题

问题描述 投票:0回答:1

我有一个使用 Kafka、Debezium Connector for Postgres 和 Schema 注册表的应用程序。目前我正在运行 Debezium Connector 1.9.3 版本,一切运行正常。

最近,当我尝试将连接器版本升级到2.0.1时,我遇到了一些架构不兼容的问题。以下是错误消息 -

io.confluent.rest.exceptions.RestException: Schema being registered is incompatible with an earlier schema for subject

我浏览了 Debezium Connector 的发行说明,并坚信这可能是因为 this 重大变更。

All schemas used by Debezium are now defined in a central point, properly named and versioned (DBZ-4365, DBZ-5044). This can lead to schema compatibility issues if a schema registry is used.

此外,根据我的探索,具有 Debezium 事件扁平化功能的连接器似乎不会面临这个问题。

任何人都可以指导我解决这个问题吗?

apache-kafka apache-kafka-connect confluent-schema-registry debezium
1个回答
0
投票

我在任何地方都找不到正确的答案。发布我最终得到的解决方案。

所以似乎没有官方支持的方法来解决这个问题。我联系了 Debezium 社区,他们提出的两种可能的解决方案是 -

  • 将架构注册表的兼容性保证降级为无,并在所有架构升级到最新版本后将其升级为向后。
  • 从架构注册表中删除所有旧架构。从而消除兼容性问题。

在我的情况下不可能实现这两种解决方案中的任何一种!

对于第一个建议,很难说我们什么时候能够升级兼容性保证。仅当升级后所有连接器都处理了至少一条消息时才能完成此操作。对于我来说,这是很难评估的事情。

对于第二个建议,从架构注册表中删除架构将导致读者无法读取现有消息!这是因为读者查询架构注册表来获取架构。

我最终采取了以下方法:

  1. 升级后暂停了所有连接器。
  2. 删除了所有旧模式。
  3. 重置所有模式的偏移量。从而迫使他们重新处理所有消息。
  4. 恢复连接器。

上述过程确保所有旧模式都被新模式替换。

虽然有一个问题,但就我而言,所有下游消费者都是幂等的(处理重复消息是安全的)。这就是这种方法有效的原因。如果您的下游消费者不是幂等的,这种方法可能会让您的系统处于糟糕的状态。

© www.soinside.com 2019 - 2024. All rights reserved.