重慶的汽車網(wǎng)站建設(shè)2022最新熱點(diǎn)事件及點(diǎn)評(píng)
1、Flink 的四大特征(基石)
checkpoin基于Chandy-Lamport算法實(shí)現(xiàn)了分布式一致性快照提供了一致性的語義
state豐富的StateAPI
time實(shí)現(xiàn)了Watermark機(jī)制,亂序數(shù)據(jù)處理,遲到數(shù)據(jù)容忍
window開箱即用的滾動(dòng),滑動(dòng)會(huì)話窗口,以及靈活的自定義窗口
2、Flink 中都有哪些 Source,哪些 Sink,哪些算子(方法)
預(yù)定義的Source
基于本地的Source(Collection-based-source)
基于文件的Source(File-based=source)
基于網(wǎng)絡(luò)套接字(socketTextStream)
自定義的Source
實(shí)現(xiàn)接口
SourceFunction并行度只能=1
ParallelSourceFunction并行度可以>=1
實(shí)現(xiàn)類
RichSourceFunction多功能非并行數(shù)據(jù)源,并行度只能=1
RichParallelSourceFunction多功能并行數(shù)據(jù)源(并行度能夠>=1) --類 【建議使用的】
Flink中常見的Sink
Print打印到控制臺(tái)
WriteAsText以文本格式輸出
WriteAsCsv以csv格式輸出
writeUsingOutputFormat 以指定的格式輸出
writeToSocket 輸出到網(wǎng)絡(luò)端口
自定義連接器(addSink)
繼承RichSinkFunction類
調(diào)用FlinkKafkaProducer
調(diào)用JdbcSink
算子(方法)
map,flatmap、keyby、reduce、filter、CountWindow、aggregate、sum、min、max、apply、process
3、什么是側(cè)道輸出流,有什么用途
側(cè)輸出可以看作是操作符的一個(gè)額外的輸出通道,除了主輸出流之外,操作符還可以產(chǎn)生一個(gè)或多個(gè)側(cè)輸出流。這些側(cè)輸出流可以被路由到不同的下游操作符,用于進(jìn)一步處理。側(cè)輸出是通過 OutputTag 來實(shí)現(xiàn)的。OutputTag 是一個(gè)類,它用于標(biāo)記一個(gè)特定的側(cè)輸出。使用時(shí),你需要為每個(gè)側(cè)輸出創(chuàng)建一個(gè) OutputTag 實(shí)例,并在操作符中使用它來指定數(shù)據(jù)流向哪個(gè)側(cè)輸出。
4、Flink 中兩個(gè)流如何合并為一個(gè)流
Union可以合并多個(gè)同類型的流(合并的datastream的類型必須是一致的,不會(huì)去重)
Connect可以連接兩個(gè)不同類型的流(最后需要吃力后再輸出,不同類型的數(shù)據(jù)可以分開處理)map(new CoMapFunction<String, Long, String>() {})和process(new CoProcessFunction<String, Long, String>() {})
5、Flink 中兩個(gè)流如何 join
join
滾動(dòng)/滑動(dòng)窗口join
coGroup
可以在apply方法中實(shí)現(xiàn)左右連接,內(nèi)連接
intervalJoin
6、Flink 中都有哪些 window,什么是滑動(dòng),滾動(dòng)窗口
不分組窗口Non-Keyed Window(windowAll不對(duì)數(shù)據(jù)流進(jìn)行分組)它們的原理和操作與Keyed Window類似,唯一的區(qū)別在于所有數(shù)據(jù)將發(fā)送給下游的單個(gè)實(shí)例,或者說下游算子的并行度為1。
分組窗口Keyed Window
CountWindow:按照指定的數(shù)據(jù)條數(shù)生成一個(gè)Window,與時(shí)間無關(guān)。
滾動(dòng)計(jì)數(shù)窗口,每隔N條數(shù)據(jù),統(tǒng)計(jì)前N條數(shù)據(jù)
滑動(dòng)計(jì)數(shù)窗口,每隔N條數(shù)據(jù),統(tǒng)計(jì)前M條數(shù)據(jù)
TimeWindow:按照時(shí)間生成Window。(重點(diǎn))
滾動(dòng)時(shí)間窗口,每隔N時(shí)間,統(tǒng)計(jì)前N時(shí)間范圍內(nèi)的數(shù)據(jù),窗口長度N,滑動(dòng)距離N
滑動(dòng)時(shí)間窗口,每隔N時(shí)間,統(tǒng)計(jì)前M時(shí)間范圍內(nèi)的數(shù)據(jù),窗口長度M,滑動(dòng)距離N
什么是滑動(dòng)什么是滾動(dòng)
滾動(dòng):窗口長度= 滑動(dòng)距離
滑動(dòng):窗口長度>滑動(dòng)距離
?
7、flink 中都有哪些時(shí)間語義,對(duì)于 event_time 中數(shù)據(jù)遲到的處理(數(shù)據(jù)亂序)
EventTime:事件(數(shù)據(jù))時(shí)間,是事件/數(shù)據(jù)真真正正發(fā)生時(shí)/產(chǎn)生時(shí)的時(shí)間
IngestionTime:攝入時(shí)間,是事件/數(shù)據(jù)到達(dá)流處理系統(tǒng)的時(shí)間
ProcessingTime:處理時(shí)間,是事件/數(shù)據(jù)被處理/計(jì)算時(shí)的系統(tǒng)的時(shí)間
數(shù)據(jù)遲到的處理
通過 assignTimestampsAndWatermarks 來設(shè)置水位線時(shí)間,讓短時(shí)間內(nèi)大量遲到的數(shù)據(jù)可以進(jìn)入對(duì)應(yīng)的窗口,當(dāng)水位線時(shí)間漫過窗口時(shí)間,開始觸發(fā)窗口操作。
通過 allowedLateness 來設(shè)置延遲時(shí)間,讓在延遲時(shí)間內(nèi)遲到的數(shù)據(jù)可以進(jìn)入窗口計(jì)算。
通過 sideOutputLateData 來設(shè)置側(cè)輸出流進(jìn)行兜底,讓更晚到的數(shù)據(jù)進(jìn)入側(cè)輸出流中。
?
8、flink 中的狀態(tài)指的是什么?有哪些狀態(tài),你使用過哪些狀態(tài),哪個(gè)項(xiàng)目使用到了狀態(tài)
狀態(tài)指的就是歷史數(shù)據(jù)(有狀態(tài)計(jì)算和無狀態(tài)計(jì)算)
狀態(tài)分為托管狀態(tài)(Managed State)和原生狀態(tài)(Raw State),對(duì)Managed State繼續(xù)細(xì)分,它又有兩種類型:Keyed State和Operator State。
使用過Managed State下的keyed State 套牌車
9、flink 中 checkpoint 是什么,如何設(shè)置。
State:狀態(tài),是Flink中某一個(gè)Operator在某一個(gè)時(shí)刻的狀態(tài),如maxBy/sum,注意State存的是歷史數(shù)據(jù)/狀態(tài),存在內(nèi)存中。
Checkpoint:快照點(diǎn), 是Flink中所有有狀態(tài)的Operator在某一個(gè)時(shí)刻的State快照信息/存檔信息。
一句話概括: Checkpoint就是State的快照。
代碼中手動(dòng)設(shè)置
集群跑jar包運(yùn)行命令設(shè)置
手動(dòng)保存checkPoint
1、使用 ctrl+c是不能停止flink任務(wù)的,需要在8081界面進(jìn)行canle job
2、使用命令手動(dòng)保存checkPoint 此時(shí)保存快照且不會(huì)停止任務(wù)
flink savepoint 79f53c5c0bb3563b6b6ed3011176c411 hdfs://bigdata01:9820/flink/checkpoint
3、停止的時(shí)候,保存一次快照
flink stop --savepointPath hdfs://bigdata01:9820/flink/checkpoint c81bb1546866566ce4e16181d0c52be8
4、停止一個(gè)任務(wù)
flink stop 152e493da9cdeb327f6cbbad5a7f8e41 job編號(hào)
79f53c5c0bb3563b6b6ed3011176c411 job編號(hào)
手動(dòng)保存時(shí),不需要在代碼中設(shè)置有關(guān)checkpoint相關(guān)的配置
手動(dòng)保存和自動(dòng)保存的結(jié)果文件是不一樣的
flink run -c com.bigdata.day06._01CheckPointDemo -s hdfs://bigdata01:9820/flink/checkpoint/bf416df7225b264fc34f8ff7e3746efe/chk-603 /opt/app/FlinkDemo-1.0-SNAPSHOT.jar
-s 表示checkPoint的文件地址
10、flink 中的重啟策略 (流式計(jì)算中的重啟策略)
重啟策略的意義:流式數(shù)據(jù)是不可能停止的,假如有一條錯(cuò)誤數(shù)據(jù)導(dǎo)致程序直接退出,后面的大量數(shù)據(jù)是會(huì)丟失的,對(duì)公司來講,意義是重大的,損失是慘重的。
11、什么是維表 join,如何實(shí)現(xiàn),你在哪個(gè)項(xiàng)目中使用過維表 join
所謂的維表Join: 進(jìn)入Flink的數(shù)據(jù),需要關(guān)聯(lián)另外一些存儲(chǔ)設(shè)備的數(shù)據(jù),才能計(jì)算出來結(jié)果,那么存儲(chǔ)在外部設(shè)備上的表稱之為維表,可能存儲(chǔ)在mysql也可能存儲(chǔ)在hbase 等。維表一般的特點(diǎn)是變化比較慢。
預(yù)加載維表
通過定義一個(gè)類實(shí)現(xiàn)RichMapFunction,在open()中讀取維表數(shù)據(jù)加載到內(nèi)存中,在kafka流map()方法中與維表數(shù)據(jù)進(jìn)行關(guān)聯(lián)。(如果表經(jīng)常變化,而且表的數(shù)據(jù)量比較大的話,這個(gè)就不太ok,還可以不在open()中讀取數(shù)據(jù)只建立查詢的連接,在map()中再執(zhí)行查詢,可以適應(yīng)表數(shù)據(jù)變化的情況)
將維表數(shù)據(jù)存儲(chǔ)在Redis、HBase、MySQL等外部存儲(chǔ)中,實(shí)時(shí)流在關(guān)聯(lián)維表數(shù)據(jù)的時(shí)候?qū)崟r(shí)去外部存儲(chǔ)中查詢
優(yōu)點(diǎn):維度數(shù)據(jù)量不受內(nèi)存限制,可以存儲(chǔ)很大的數(shù)據(jù)量。
缺點(diǎn):因?yàn)榫S表數(shù)據(jù)在外部存儲(chǔ)中,讀取速度受制于外部存儲(chǔ)的讀取速度;另外維表的同步也有延遲。
熱存儲(chǔ)維表
使用緩存來存儲(chǔ)一部分常訪問的維表數(shù)據(jù),以減少訪問外部系統(tǒng)的次數(shù),比如使用Guava Cache。
相當(dāng)于把數(shù)據(jù)按照一定數(shù)量和一定的時(shí)間間隔來查詢更新和存儲(chǔ)到緩存中,每次需要用到的時(shí)候先去緩存查找如果沒有在去數(shù)據(jù)庫查找,
12、flinksql 如何讀取 kafka 或者 mysql 的數(shù)據(jù)。
table轉(zhuǎn)stream和stream轉(zhuǎn)table