成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

《從0到1學(xué)習(xí)Flink》—— Data Sink 介紹

thursday / 2101人閱讀

摘要:從上圖可以看到接口有方法,它有一個抽象類。上面的那些自帶的可以看到都是繼承了抽象類,實現(xiàn)了其中的方法,那么我們要是自己定義自己的的話其實也是要按照這個套路來做的。

前言

再上一篇文章中 《從0到1學(xué)習(xí)Flink》—— Data Source 介紹 講解了 Flink Data Source ,那么這里就來講講 Flink Data Sink 吧。

首先 Sink 的意思是:

大概可以猜到了吧!Data sink 有點把數(shù)據(jù)存儲下來(落庫)的意思。

如上圖,Source 就是數(shù)據(jù)的來源,中間的 Compute 其實就是 Flink 干的事情,可以做一系列的操作,操作完后就把計算后的數(shù)據(jù)結(jié)果 Sink 到某個地方。(可以是 MySQL、ElasticSearch、Kafka、Cassandra 等)。這里我說下自己目前做告警這塊就是把 Compute 計算后的結(jié)果 Sink 直接告警出來了(發(fā)送告警消息到釘釘群、郵件、短信等),這個 sink 的意思也不一定非得說成要把數(shù)據(jù)存儲到某個地方去。其實官網(wǎng)用的 Connector 來形容要去的地方更合適,這個 Connector 可以有 MySQL、ElasticSearch、Kafka、Cassandra RabbitMQ 等。

Flink Data Sink

前面文章 《從0到1學(xué)習(xí)Flink》—— Data Source 介紹 介紹了 Flink Data Source 有哪些,這里也看看 Flink Data Sink 支持的有哪些。

看下源碼有哪些呢?

可以看到有 Kafka、ElasticSearch、Socket、RabbitMQ、JDBC、Cassandra POJO、File、Print 等 Sink 的方式。

SinkFunction

從上圖可以看到 SinkFunction 接口有 invoke 方法,它有一個 RichSinkFunction 抽象類。

上面的那些自帶的 Sink 可以看到都是繼承了 RichSinkFunction 抽象類,實現(xiàn)了其中的方法,那么我們要是自己定義自己的 Sink 的話其實也是要按照這個套路來做的。

這里就拿個較為簡單的 PrintSinkFunction 源碼來講下:

@PublicEvolving
public class PrintSinkFunction extends RichSinkFunction {
    private static final long serialVersionUID = 1L;

    private static final boolean STD_OUT = false;
    private static final boolean STD_ERR = true;

    private boolean target;
    private transient PrintStream stream;
    private transient String prefix;

    /**
     * Instantiates a print sink function that prints to standard out.
     */
    public PrintSinkFunction() {}

    /**
     * Instantiates a print sink function that prints to standard out.
     *
     * @param stdErr True, if the format should print to standard error instead of standard out.
     */
    public PrintSinkFunction(boolean stdErr) {
        target = stdErr;
    }

    public void setTargetToStandardOut() {
        target = STD_OUT;
    }

    public void setTargetToStandardErr() {
        target = STD_ERR;
    }

    @Override
    public void open(Configuration parameters) throws Exception {
        super.open(parameters);
        StreamingRuntimeContext context = (StreamingRuntimeContext) getRuntimeContext();
        // get the target stream
        stream = target == STD_OUT ? System.out : System.err;

        // set the prefix if we have a >1 parallelism
        prefix = (context.getNumberOfParallelSubtasks() > 1) ?
                ((context.getIndexOfThisSubtask() + 1) + "> ") : null;
    }

    @Override
    public void invoke(IN record) {
        if (prefix != null) {
            stream.println(prefix + record.toString());
        }
        else {
            stream.println(record.toString());
        }
    }

    @Override
    public void close() {
        this.stream = null;
        this.prefix = null;
    }

    @Override
    public String toString() {
        return "Print to " + (target == STD_OUT ? "System.out" : "System.err");
    }
}

可以看到它就是實現(xiàn)了 RichSinkFunction 抽象類,然后實現(xiàn)了 invoke 方法,這里 invoke 方法就是把記錄打印出來了就是,沒做其他的額外操作。

如何使用?
SingleOutputStreamOperator.addSink(new PrintSinkFunction<>();

這樣就可以了,如果是其他的 Sink Function 的話需要換成對應(yīng)的。

使用這個 Function 其效果就是打印從 Source 過來的數(shù)據(jù),和直接 Source.print() 效果一樣。

下篇文章我們將講解下如何自定義自己的 Sink Function,并使用一個 demo 來教大家,讓大家知道這個套路,且能夠在自己工作中自定義自己需要的 Sink Function,來完成自己的工作需求。

最后

本文主要講了下 Flink 的 Data Sink,并介紹了常見的 Data Sink,也看了下源碼的 SinkFunction,介紹了一個簡單的 Function 使用, 告訴了大家自定義 Sink Function 的套路,下篇文章帶大家寫個。

關(guān)注我

轉(zhuǎn)載請務(wù)必注明原創(chuàng)地址為:http://www.54tianzhisheng.cn/2018/10/29/flink-sink/

另外我自己整理了些 Flink 的學(xué)習(xí)資料,目前已經(jīng)全部放到微信公眾號了。你可以加我的微信:zhisheng_tian,然后回復(fù)關(guān)鍵字:Flink 即可無條件獲取到。

相關(guān)文章

1、《從0到1學(xué)習(xí)Flink》—— Apache Flink 介紹

2、《從0到1學(xué)習(xí)Flink》—— Mac 上搭建 Flink 1.6.0 環(huán)境并構(gòu)建運行簡單程序入門

3、《從0到1學(xué)習(xí)Flink》—— Flink 配置文件詳解

4、《從0到1學(xué)習(xí)Flink》—— Data Source 介紹

5、《從0到1學(xué)習(xí)Flink》—— 如何自定義 Data Source ?

6、《從0到1學(xué)習(xí)Flink》—— Data Sink 介紹

7、《從0到1學(xué)習(xí)Flink》—— 如何自定義 Data Sink ?

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/72087.html

相關(guān)文章

  • 01學(xué)習(xí)Flink》—— 如何自定義 Data Sink ?

    摘要:前言前篇文章從到學(xué)習(xí)介紹介紹了,也介紹了自帶的,那么如何自定義自己的呢這篇文章將寫一個教大家將從的數(shù)據(jù)到中去。 showImg(https://segmentfault.com/img/remote/1460000016990655?w=1920&h=1281); 前言 前篇文章 《從0到1學(xué)習(xí)Flink》—— Data Sink 介紹 介紹了 Flink Data Sink,也介紹...

    NikoManiac 評論0 收藏0
  • 01學(xué)習(xí)Flink》—— Flink 寫入數(shù)據(jù) ElasticSearch

    摘要:從到學(xué)習(xí)介紹從到學(xué)習(xí)介紹其中包括了和的,后面我也講了下如何自定義自己的和。這個問題可是線上很容易遇到的關(guān)注我轉(zhuǎn)載請務(wù)必注明原創(chuàng)地址為微信公眾號另外我自己整理了些的學(xué)習(xí)資料,目前已經(jīng)全部放到微信公眾號了。 showImg(https://segmentfault.com/img/remote/1460000017935460?w=1280&h=853); 前言 前面 FLink 的文章中...

    W4n9Hu1 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<