1.一文搞定Flink自定義JDBC

1.前言

本論壇發(fā)送的所有內(nèi)容,都是筆者在自己的個人的筆記上優(yōu)化后謄寫而來浇坐,希望自己所擁有的知識能夠幫助更多有學(xué)習(xí)欲望的人勺拣。但值得一提的是,由于本人接觸行業(yè)時間有限,可能會出現(xiàn)一些技術(shù)上的紕漏熙尉,如果有問題歡迎私信联逻、評論指出,大家共同進步检痰。


2.簡單介紹

在Flink對數(shù)據(jù)進行計算的時候包归,一般會按照階段的不同,將處理過程分為 source->transform->sink
借此來完成數(shù)據(jù)從讀取到計算再到寫出的全過程铅歼。
本章節(jié)當(dāng)中要介紹的FlinkJDBC其實就是Sink階段的成員之一公壤,它能夠幫助Flink達成從數(shù)據(jù)流到存儲介質(zhì)保存的全過程(存儲介質(zhì)需要支持JDBC)。如果SINK方的這個存儲介質(zhì)支持XA事務(wù)的話椎椰,那么FlinkJDBC還能夠?qū)ζ涮峁┚珳?zhǔn)一次性語義厦幅。


3.FlinkJDBC使用

3.1 引入依賴


<dependency>

    <groupId>org.apache.flink</groupId>

    <artifactId>flink-connector-jdbc</artifactId>

    <version>1.15.0</version>

</dependency>

3.2 直接指定JDBCSink即可

這里以ClickHouse為例->本代碼可直接粘貼使用,因為是在文檔中手寫的,沒有用編輯器俭识,所以可能會有錯別單詞.


//1.聲明靜態(tài)方法

public static <T> SinkFunction<T> getJdbcSink(String sql){

    return JdbcSink.<T>sink(

        sql,

        new JdbcStatementBuilder<T>(){

            //這個方法主要是完成對sql語句中的數(shù)據(jù)內(nèi)容對PreparedStatement對象中占位符的賦值

            @Overwrite

            public void accept(PreparedStatement preparedStatement,T obj) throws SQLException{

                    //通過反射來完成賦值慨削,本段代碼結(jié)束之后有關(guān)于這部分內(nèi)容反射相關(guān)知識的介紹

                    Field[] declaredFields = obj.getClass().getDeclaredFields();

                    for(int i=0; i<declaredFields.length; i++){

                        Filed declaredField = declaredFields[i];

                        declaredField.setAccessible(true);

                        try{

                            Object value = declaredField.get(obj);

                            preparedStatement.setObject(i,value);

                            }catch(IllegalAccessException e){

                                e.printStackTrace();

                            }

                        }

                }

            },

        JdbcExecutionOptions.bulider()

        .withBatchIntervalMs(5000L) //指定多長時間發(fā)送一次

        .withBatchSize(5) //指定攢夠多少條數(shù)發(fā)送一次

        .build(),

        new JdbcConnectionOptions.JdbcConnectionOptionsBuilder()

        .withDriverName("ru.yandex.clickhouse.ClickHouseDriver") //Drvier

        .withUrl("jdbc:clickhouse://hadoop102:8123/table") //url

        .build()

    );   

}


4.反射相關(guān)知識的描述

反射機制對于我來說,實際上就是一種能夠為使用者提供針對未知對象或者未知類來進行內(nèi)容讀取的一個功能套媚。這是我個人對于反射的淺顯理解缚态,如果有錯誤歡迎指正。接下來我就要用我所理解的內(nèi)容堤瘤,編寫一個簡單的例子玫芦,來解釋3.2程序段中accept方法是如何完成實體類對占位符進行賦值的過程。

4.1 反射的小例子

思路:主程序想要通過對一個方法傳入不同的實體類本辐,來獲得所有實體類中的所有屬性的字段信息桥帆。

準(zhǔn)備:主程序(用來調(diào)用方法)、兩個不同的實體類(用來對公共方法做驗證)慎皱、泛型方法(輸出實體類中的字段信息)


//實體類1

@Data

@AllArgsConstructor

public class Student {

//用來表示學(xué)生信息

    private String name;

    private String banji;

    private String score;

}

//實體類2

@Data

@AllArgsConstructor

public class Teacher {

    //用來表示老師信息

    private String dept;

    private String classHeader;

}


//泛型方法

import java.lang.reflect.Field;

import java.util.ArrayList;

import java.util.List;

public class ReadInfoMethod {

    //通過傳入?yún)?shù)老虫,然后循環(huán)的將作為參數(shù)的對象中的所有屬性的值信息添加到數(shù)組中

    public static <T> List<T> getInfo(T t){

        Class<?> aClass = t.getClass();

        Field[] declaredFields = aClass.getDeclaredFields();

        ArrayList<T> result = new ArrayList<T>();

        for (Field declaredField : declaredFields) {

            int num = 0;

            declaredField.setAccessible(true);

            try {

                T o = (T)declaredField.get(t);

                result.add(num,o);

                num++;

            }catch (IllegalAccessException e){

                e.printStackTrace();

            }

        }

        return  result;

    }

}


//主程序

public class test {

    public static void main(String[] args) {

        Student student = new Student("弗林克", "三年二班", "95");

        Teacher teacher = new Teacher("辦公室部門", "三年二班班主任");

        //調(diào)用泛型方法,獲得傳入對象的所有屬性字段的值信息的列表

        List<Student> info = ReadInfoMethod.getInfo(student);

        List<Teacher> teachers = ReadInfoMethod.getInfo(teacher);

        System.out.println(info);

        System.out.println(teachers);

    }

}

泛型方法中調(diào)用的方法的方式茫多,與FlinkJDBC中的accept方法中的內(nèi)容如出一轍祈匙。二者在表現(xiàn)形式上的區(qū)別就是accept方法在對占位符進行賦值的時候,需要指定對應(yīng)字段的索引位置天揖,因此 才有了preparedStatement.setObject(i,value);的這種方式夺欲。

Flink官網(wǎng)中針對這部分內(nèi)容進行描述的地址是:https://nightlies.apache.org/flink/flink-docs-release-1.15/docs/connectors/datastream/jdbc/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市今膊,隨后出現(xiàn)的幾起案子些阅,更是在濱河造成了極大的恐慌,老刑警劉巖斑唬,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件市埋,死亡現(xiàn)場離奇詭異黎泣,居然都是意外死亡,警方通過查閱死者的電腦和手機腰素,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門聘裁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弓千,你說我怎么就攤上這事衡便。” “怎么了洋访?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵镣陕,是天一觀的道長。 經(jīng)常有香客問我姻政,道長呆抑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任汁展,我火速辦了婚禮鹊碍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘食绿。我一直安慰自己侈咕,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布器紧。 她就那樣靜靜地躺著耀销,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铲汪。 梳的紋絲不亂的頭發(fā)上熊尉,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音掌腰,去河邊找鬼狰住。 笑死,一個胖子當(dāng)著我的面吹牛齿梁,可吹牛的內(nèi)容都是我干的转晰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼士飒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蔗崎?” 一聲冷哼從身側(cè)響起酵幕,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缓苛,沒想到半個月后芳撒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邓深,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年笔刹,在試婚紗的時候發(fā)現(xiàn)自己被綠了芥备。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡舌菜,死狀恐怖萌壳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情日月,我是刑警寧澤袱瓮,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站爱咬,受9級特大地震影響尺借,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜精拟,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一燎斩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蜂绎,春花似錦栅表、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至坛吁,卻和暖如春劳殖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拨脉。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工哆姻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人玫膀。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓矛缨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親帖旨。 傳聞我的和親對象是個殘疾皇子箕昭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容