Kafka主题消息版本控制

4
我发布消息到一个kafka主题(outputTopic)中,以一种我的订阅者可以理解的格式。我现在希望以某种方式修改这些消息的格式,而这样做将打破现有的主题消费者。

例如,我发布对象,以json格式序列化,但需要更改对象,因此也要更改架构。

管理这种类型的更改的最佳方法是什么?我应该修改生产者,让它发布到一个新主题(outputTopic2)吗?还有其他更好的管理方式吗?

不同的模式通常需要一个单独的主题,但是Kafka无论如何都会接受这些消息。如果您不想编辑任何消费者代码,那么就必须这样做。 - OneCricketeer
Kafka 中旧版本的历史事件对未来需求有重要作用吗? - Sahil Gupta
1
理论上,如果您可以确保支持新模型的消费者从可预测的分区中消费,则可以将新模型的消息路由到这些分区。但是,您需要小心,不要因此破坏负载平衡。也许将路由到消费者组可能会有所帮助。 - Lewis Watson
2个回答

3

Avro模式不能解决这个问题。无论是否有模式,您都可以更新消费者以处理旧版本和新版本。

相反,请保持生产者不变。部署一个更新的版本,从同一数据源读取数据,并使用新的更新格式将数据发布到新主题中。

在最终删除旧主题之前,允许消费者从旧版本迁移到新版本。


2

我认为一个干净简单的方法,是使用Schema registry / Apache Avro。根据您的使用方式,它将帮助您确保向前/向后兼容性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接