我有一个使用 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 事件扁平化功能的连接器似乎不会面临这个问题。
任何人都可以指导我解决这个问题吗?
我在任何地方都找不到正确的答案。发布我最终得到的解决方案。
所以似乎没有官方支持的方法来解决这个问题。我联系了 Debezium 社区,他们提出的两种可能的解决方案是 -
在我的情况下不可能实现这两种解决方案中的任何一种!
对于第一个建议,很难说我们什么时候能够升级兼容性保证。仅当升级后所有连接器都处理了至少一条消息时才能完成此操作。对于我来说,这是很难评估的事情。
对于第二个建议,从架构注册表中删除架构将导致读者无法读取现有消息!这是因为读者查询架构注册表来获取架构。
我最终采取了以下方法:
上述过程确保所有旧模式都被新模式替换。
虽然有一个问题,但就我而言,所有下游消费者都是幂等的(处理重复消息是安全的)。这就是这种方法有效的原因。如果您的下游消费者不是幂等的,这种方法可能会让您的系统处于糟糕的状态。