Kafka avro序列化与模式演变

时间:2018-05-15 14:03:36

标签: apache-kafka avro kafka-producer-api

我正在尝试构建一个kakfa管道,它将JSON输入数据读入Kafka主题 我正在使用AVRO序列化和架构注册表,因为我的架构会定期更改 截至目前,GenericRecord用于解析模式 但我最近才知道avro-tools可用于读取模式并生成可用于创建Producer Code的Java类。
我很困惑在这两个选项之间做出选择 你可以建议我哪一个更好,因为我的架构经常变化?

1 个答案:

答案 0 :(得分:0)

  

avro-tools可用于读取模式并生成可用于创建Producer Code

的java类

他们创建特定的Avro类,而不是生产者代码,但是关于这个问题。两者都有效。

我看待它的方式

  • GenericRecord - 将其视为HashMap<String, Object>。作为消费者需要了解要获得的字段。如果作为制作人或模式创建者,您无法将您的课程作为图书馆发送给您的消费者,那么这本质上是您可以获得的最佳选择。我相信您始终能够获取最新数据(get("fieldname")来电可以访问所有可能的字段。See example here
  • SpecificRecordavro-tools生成的内容) - 它只是一个带有getter方法和构建器对象/ setter方法的生成类。任何使用者都可以将生成器类作为依赖项导入,反序列化消息,然后立即知道哪些字段可用。您不能保证在这里获得最新的架构 - 您将会降级&#34;降级&#34;并且限于用于生成这些类的任何模式。

我使用avro-maven-plugin来创建类。 Just as this example

您也可以使用Java类中的AvroReflect to build an Avro schema而不是相反。设置@Union@AvroDefault设置的字段Annotations can be used

Further Reading about using the Confluent Schema Registry