1.通过脚本命令 avro-tools
这几天在弄一件事情,用flink在kafka中读取数据,kafka中的数据是avro序列化的。
按照正常的思维就是需要数据解析,得到文件里面数据结构的bean的对象,但对于复杂结构的数据通过手动去编写bean对象是很麻烦的。
刚好Apache avro提供了一种工具,如下图
但我这有点问题就是 avro版本要和avro-tools版本一定要一致,否则解析出来的bean会报错!!!
把上图中的两个jar包放到java目录下,就可以写脚本了
java -jar avro-tools-1.7.7.jar compile schema user.avsc java.
参考文章:大致过程参考
另一种方式参考文章:通过pom文件获得对象,mvn
但是在执行的时候出现了问题:文件找不到,所以就怀疑是不是路径里面出现括号的原因
随后将 *.avsc文件放到另一个路径下,成功获得了文件的对象
ACPDR.java就可以直接用了!
2.通过mvn方式,主要是pom文件配置
第二种方式主要是导入pom依赖,然后mvn-clean-install就可以了
3.通过代码方式
这里我把 .avsc文件的路径写到了配置文件里面!!!然后通过配置文件获取路径。否则会报错。
试着这种方式,误打误撞居然可以解析成功!!!~~
这里主要借用了一种获取配置文件的方式,还是比较好用的,一般打包也不会报错
//获取配置文件参数
ClassPathResource resource = new ClassPathResource("config-" + args[0] + ".properties");
InputStream inputStream = resource.getInputStream();
ParameterTool param = ParameterTool.fromPropertiesFile(inputStream);
下面是avro反序列化的方式,主要是传入Flink的consumer中作为反序列化类。
亲测成功!
4.通过代码自定义方法
avro-tools是我第一次用,所以把这次的学习记录了下来。
Apache avro的官方网站:http://avro.apache.org/docs/current/api/java/index.html