我们为我们的Kafka主题使用Avro方案,它代表一个“公共”接口。当这样的主题现在在Kafka-Streams应用程序中使用并调用有状态操作时,相同的模式会自动再次注册一个内部名称。
处理这种情况的常用方法是什么?除了我的应用程序之外,这些主题和状态存储永远不会被其他任何人使用,所以我不认为将该模式发布到注册中心有什么意义。有没有一种方法可以只使用一些本地可用的模式,或者至少不为每个内部主题多次发布模式?
我们为我们的Kafka主题使用Avro方案,它代表一个“公共”接口。当这样的主题现在在Kafka-Streams应用程序中使用并调用有状态操作时,相同的模式会自动再次注册一个内部名称。
处理这种情况的常用方法是什么?除了我的应用程序之外,这些主题和状态存储永远不会被其他任何人使用,所以我不认为将该模式发布到注册中心有什么意义。有没有一种方法可以只使用一些本地可用的模式,或者至少不为每个内部主题多次发布模式?
2条答案
按热度按时间7uhlpewt1#
不再为每个内部主题多次发布架构
您可以为拓扑的每一步修改Serde,但这样就不必要地在不同的数据格式之间来回封送数据(一个有注册表ID,一个没有)。这最终会降低处理速度。当您使用AvroSerde + SpecificRecord子类时,每一个模式都已经是本地的.
您的注册服务器主题列表不是公共API的一部分。它是私有的。
ix0qys7i2#
我认为最好的解决方案是通过设置配置参数
auto.register.schemas=false
来禁用自动模式注册,并使用SchemaRegistry。PS:客户端需要设置auto.register.schemas=false
参见https://docs.confluent.io/platform/current/schema-registry/security/index.html