實踐+總結:Apache avro根據*.avsc文件提取對象的三種方式

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中作爲反序列化類。
親測成功!
在這裏插入圖片描述

avro-tools是我第一次用,所以把這次的學習記錄了下來。
Apache avro的官方網站:http://avro.apache.org/docs/current/api/java/index.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章