Kafka是当今主流的消息中间件,我们要用其实现(Kafka生产者)发送消息的功能,要先有定义消息的所有属性(字段)的消息类,然后才能用Kafka serializer来发送消息。
而这个消息类要由Schema生成,所以我们要先创建Schema。
本文以创建avro格式的schema为例,讲述为Kafka生产者创建schema的步骤,希望能帮助到刚开始作Kafka项目的朋友,也欢迎大家指正。
步骤如下:
1. 创建avro格式的schema文件,比如demoMessage.avsc,在其中定义“要把由该schema生成的消息类放到哪个package下面(通过定义namespace来定义)”、该schema的类型(type)、“要由该schema生成的消息类的类名(通过定义name来定义)、消息包含的字段(通过定义fields来定义)。例如:
{
"namespace": "demo.kafka.model",
"type": "record",
"name": "DemoMessage",
"fields": [
{"name": "category", "type": "string"},
{"name": "product", "type": "string"},
{"name": "vendor", "type": "string", "default": "ABC"},
]
}
2. 更新该项目的pom文件以支持avro插件,可参考https://dzone.com/articles/using-avros-code-generation,例如:
<plugin> <groupId>org.apache.avro</groupId> <artifactId>avro-maven-plugin</artifactId> <version>${avro.version}</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>schema</goal> </goals> </execution> </executions> </plugin> ... <dependencies> <dependency> <groupId>org.apache.avro</groupId> <artifactId>avro</artifactId> <version>${avro.version}</version> </dependency> <dependency> <groupId>org.apache.avro</groupId> <artifactId>avro-maven-plugin</artifactId> <version>${avro.version}</version> </dependency> <dependency> <groupId>org.apache.avro</groupId> <artifactId>avro-compiler</artifactId> <version>${avro.version}</version> </dependency> <dependency> <groupId>org.apache.avro</groupId> <artifactId>avro-ipc</artifactId> <version>${avro.version}</version> </dependency> </dependencies>
3. 在IDE(eclipse或IDEA)里,右击该schema文件demoMessage.avsc、选择"maven -> generate sources"就能够生成对应的消息类DemoMessage.class了。