DataStream API介紹

1. 什么樣的數(shù)據(jù)可以流化

對于Java和Scala來說累魔,凡是可以被序列化的對象都可以流化士嚎。Flink自己的序列化器可以用于:

  • 基本數(shù)據(jù)類型:String, Long, Integer, Boolean, Array等
  • 組合數(shù)據(jù)類型:Tuples, POJOs and Scala case classes
    在Java里组底,F(xiàn)link提供了Tuple0到Tuple25共26種Tuple類型戈稿。
    Flink將滿足以下三點(diǎn)要求的對象都看作是POFO:
  • public且獨(dú)立(非靜態(tài)內(nèi)部類)的類
  • 有public的無參構(gòu)造方法
  • 類里所有非靜態(tài)非transient屬性都要么是public非final的喻犁,要么有public的get/set方法

2. 一個完整的例子

import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.api.common.functions.FilterFunction;

public class Example {

    public static void main(String[] args) throws Exception {
        final StreamExecutionEnvironment env =
                StreamExecutionEnvironment.getExecutionEnvironment();

        DataStream<Person> flintstones = env.fromElements(
                new Person("Fred", 35),
                new Person("Wilma", 35),
                new Person("Pebbles", 2));

        DataStream<Person> adults = flintstones.filter(new FilterFunction<Person>() {
            @Override
            public boolean filter(Person person) throws Exception {
                return person.age >= 18;
            }
        });

        adults.print();

        env.execute();
    }

    public static class Person {
        public String name;
        public Integer age;
        public Person() {};

        public Person(String name, Integer age) {
            this.name = name;
            this.age = age;
        }

        public String toString() {
            return this.name.toString() + ": age " + this.age.toString();
        }
    }
}
  • Stream Execution Environment
    每一個Flink應(yīng)用程序都需要一個執(zhí)行環(huán)境蔓搞,在本例中是一個StreamExecutionEnvironment瑞筐。DataStream API的調(diào)用會生成一個job graph, 并添加到StreamExecutionEnvironment上凄鼻。env.execute()調(diào)用之后,graph被打包發(fā)送到j(luò)obManager, 有jobManager并行化job并分配給不同的Task Managers來執(zhí)行聚假。每一個job的parallel slice都會在一個task slot執(zhí)行块蚌。如果不調(diào)用execute, 程序永遠(yuǎn)不會執(zhí)行。

  • Basic Stream Sources
    stream的source可以如上例的elements, 也可以是集合膘格,socket或文件

List<Person> people = new ArrayList<Person>();

people.add(new Person("Fred", 35));
people.add(new Person("Wilma", 35));
people.add(new Person("Pebbles", 2));

DataStream<Person> flintstones = env.fromCollection(people);

DataStream<String> lines = env.socketTextStream("localhost", 9999);

DataStream<String> lines = env.readTextFile("file:///path");

但在實(shí)際應(yīng)用中峭范,通常要選取支持低延遲高吞吐并發(fā)讀取,并能夠倒退重播的source, 比如kafka瘪贱,Kinesis及不同的文件系統(tǒng)纱控。REST API和數(shù)據(jù)庫也可以使用。

  • Basic Stream Sinks
    例子里調(diào)用print方法輸出結(jié)果到task manager的log, 會調(diào)用每個element的toString()方法政敢,輸出結(jié)果如下:
1> Fred: age 35
2> Wilma: age 35

其中1>, 2>表示是哪一個sub task輸出的結(jié)果其徙。
在生產(chǎn)中,常用StreamingFileSink, 各種數(shù)據(jù)庫和發(fā)布訂閱系統(tǒng)喷户。

  • Debugging
    生產(chǎn)環(huán)境中唾那,應(yīng)用通常跑在集群上或者容器里,如果fail了褪尝,就是遠(yuǎn)程的闹获,這時我們可以查看JobManager和TaskManager的log.同時也可以在本地IDE上調(diào)試代碼。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末河哑,一起剝皮案震驚了整個濱河市避诽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌璃谨,老刑警劉巖沙庐,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異佳吞,居然都是意外死亡拱雏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門底扳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铸抑,“玉大人,你說我怎么就攤上這事衷模∪笛矗” “怎么了蒲赂?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長刁憋。 經(jīng)常有香客問我滥嘴,道長,這世上最難降的妖魔是什么职祷? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任氏涩,我火速辦了婚禮,結(jié)果婚禮上有梆,老公的妹妹穿的比我還像新娘是尖。我一直安慰自己,他們只是感情好泥耀,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布饺汹。 她就那樣靜靜地躺著,像睡著了一般痰催。 火紅的嫁衣襯著肌膚如雪兜辞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天夸溶,我揣著相機(jī)與錄音逸吵,去河邊找鬼。 笑死缝裁,一個胖子當(dāng)著我的面吹牛扫皱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捷绑,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼韩脑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了粹污?” 一聲冷哼從身側(cè)響起段多,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎壮吩,沒想到半個月后进苍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸭叙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年觉啊,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片递雀。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡柄延,死狀恐怖蚀浆,靈堂內(nèi)的尸體忽然破棺而出缀程,到底是詐尸還是另有隱情搜吧,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布杨凑,位于F島的核電站滤奈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏撩满。R本人自食惡果不足惜蜒程,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伺帘。 院中可真熱鬧昭躺,春花似錦、人聲如沸伪嫁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽张咳。三九已至帝洪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間脚猾,已是汗流浹背葱峡。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留龙助,地道東北人砰奕。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像泌参,于是被迫代替她去往敵國和親脆淹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

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

  • 本次練習(xí) 的重點(diǎn) 是充分全面介紹 DataStream API沽一, 以使你能夠使用 其 編寫 流式應(yīng)用程序盖溺。 什么能...
    lukeyan閱讀 434評論 0 1
  • 概述 2019 年是大數(shù)據(jù)實(shí)時計(jì)算領(lǐng)域最不平凡的一年,2019 年 1 月阿里巴巴 Blink (內(nèi)部的 Flin...
    Yobhel閱讀 1,841評論 0 33
  • 基礎(chǔ)概念考察 一铣缠、 簡單介紹一下 Flink Flink 是一個框架和分布式處理引擎烘嘱,用于對無界和有界數(shù)據(jù)流進(jìn)行有...
    Tim在路上閱讀 805評論 0 9
  • 概述 2019 年是大數(shù)據(jù)實(shí)時計(jì)算領(lǐng)域最不平凡的一年,2019 年 1 月阿里巴巴 Blink (內(nèi)部的 Flin...
    王知無閱讀 3,242評論 2 11
  • 基礎(chǔ)概念考察 一蝗蛙、 簡單介紹一下 Flink Flink 是一個框架和分布式處理引擎蝇庭,用于對無界和有界數(shù)據(jù)流進(jìn)行有...
    Tim在路上閱讀 16,081評論 0 8