我正在使用kafka&schema注册表。在生产者端使用confluent的kafkaavroserializer定义了一个模式。一切正常。另一方面,如果生产者在不遵循模式的情况下发布事件,那么发布事件就不会有任何问题。Kafka只得到序列化的二进制文件,不检查数据和功能的设计工作。想知道是否有更好的方法来实施更强大的模式验证,这样主题就不会被坏数据污染?
mjqavswn1#
在创建主题时使用以下“--config”标记。它们分别对值和键执行消息模式验证。这两条规则是相互独立的;您可以启用其中一个或两个。不兼容的消息将导致客户端从kafka代理接收错误。https://www.confluent.io/blog/data-governance-with-schema-validation/
confluent.value.schema.validation=true confluent.key.schema.validation=true
cygmwpex2#
如果您使用的是schema registry和kafkaavroserializer,那么它将按预期工作。schema registry的重要方面是支持schema演化,其中schema可以随时间变化。每个事件都将有一个wire格式的嵌入式模式id,它将允许在使用者端反序列化事件。但是,如果你想在写Kafka主题之前进行严格的模式验证,有两种选择-您可以在应用程序中定义模式并使用 SpecificRecord 类型使用API从schema registry subject获取架构,并在写入主题之前根据中的进行验证。
SpecificRecord
2条答案
按热度按时间mjqavswn1#
在创建主题时使用以下“--config”标记。它们分别对值和键执行消息模式验证。这两条规则是相互独立的;您可以启用其中一个或两个。不兼容的消息将导致客户端从kafka代理接收错误。
https://www.confluent.io/blog/data-governance-with-schema-validation/
cygmwpex2#
如果您使用的是schema registry和kafkaavroserializer,那么它将按预期工作。schema registry的重要方面是支持schema演化,其中schema可以随时间变化。每个事件都将有一个wire格式的嵌入式模式id,它将允许在使用者端反序列化事件。
但是,如果你想在写Kafka主题之前进行严格的模式验证,有两种选择-
您可以在应用程序中定义模式并使用
SpecificRecord
类型使用API从schema registry subject获取架构,并在写入主题之前根据中的进行验证。