柚子快報(bào)邀請(qǐng)碼778899分享:Flink教程:并行度
柚子快報(bào)邀請(qǐng)碼778899分享:Flink教程:并行度
Flink的并行度介紹一下?
概述
Flink的并行度(Parallelism)是指在Flink作業(yè)中并行執(zhí)行任務(wù)的程度。它決定了作業(yè)中任務(wù)的數(shù)量以及任務(wù)之間的數(shù)據(jù)劃分和分配方式。并行度是一個(gè)重要的概念,對(duì)于實(shí)現(xiàn)高吞吐量和低延遲的流處理非常關(guān)鍵。
在Flink中,有兩個(gè)級(jí)別的并行度可以進(jìn)行配置:
作業(yè)級(jí)別并行度(Job Parallelism):
作業(yè)級(jí)別并行度是指整個(gè)作業(yè)中任務(wù)的數(shù)量,它決定了作業(yè)的整體并行執(zhí)行能力。作業(yè)級(jí)別并行度可以在提交作業(yè)時(shí)通過(guò)編程API或命令行參數(shù)進(jìn)行指定。例如,可以設(shè)置作業(yè)級(jí)別并行度為4,表示將作業(yè)劃分為4個(gè)并發(fā)任務(wù)進(jìn)行執(zhí)行。作業(yè)級(jí)別并行度通常與集群中可用的計(jì)算資源數(shù)量相關(guān)聯(lián),以充分利用集群的處理能力。 算子級(jí)別并行度(Operator Parallelism):
算子級(jí)別并行度是指每個(gè)算子(Operator)的任務(wù)數(shù)量,它決定了每個(gè)算子的并行執(zhí)行程度。在Flink中,每個(gè)算子都可以獨(dú)立地設(shè)置并行度。默認(rèn)情況下,算子的并行度與作業(yè)級(jí)別并行度相同,但可以根據(jù)需要進(jìn)行調(diào)整。通過(guò)設(shè)置算子級(jí)別并行度,可以根據(jù)數(shù)據(jù)流的特點(diǎn)和負(fù)載分布,實(shí)現(xiàn)更細(xì)粒度的任務(wù)劃分和負(fù)載均衡。
并行度的選擇需要考慮多個(gè)因素,包括可用的計(jì)算資源、數(shù)據(jù)流的特性、任務(wù)之間的依賴(lài)關(guān)系以及作業(yè)的性能需求。合理的并行度設(shè)置可以充分利用集群的資源,提高作業(yè)的吞吐量和響應(yīng)時(shí)間。同時(shí),還需要避免過(guò)度的并行度,以避免資源浪費(fèi)和額外的通信開(kāi)銷(xiāo)。
需要注意的是,并行度的設(shè)置也會(huì)影響作業(yè)的一致性和結(jié)果正確性。在具有有狀態(tài)操作的情況下,確保正確的并行度設(shè)置以保持正確的狀態(tài)管理和結(jié)果一致性非常重要。
補(bǔ)充
Flink程序在執(zhí)行的時(shí)候,會(huì)被映射成一個(gè)**Streaming Dataflow。**一個(gè)Streaming Dataflow是由一組Stream和Transformation Operator組成的。在啟動(dòng)時(shí)從一個(gè)或多個(gè)Source Operator開(kāi)始,結(jié)束于一個(gè)或多個(gè)Sink Operator。
Flink程序本質(zhì)上是并行的和分布式的,在執(zhí)行過(guò)程中,一個(gè)流(stream)包含一個(gè)或多個(gè)流分區(qū),而每一個(gè)operator包含一個(gè)或多個(gè)operator子任務(wù)。操作子任務(wù)間彼此獨(dú)立,在不同的線程中執(zhí)行,甚至是在不同的機(jī)器或不同的容器上。
operator子任務(wù)的數(shù)量是這一特定operator的并行度。相同程序中的不同operator有不同級(jí)別的并行度。
一個(gè)Stream可以被分成多個(gè)Stream的分區(qū),也就是Stream Partition。一個(gè)Operator也可以被分為多個(gè)Operator Subtask。如上圖中,Source被分成Source1和Source2,它們分別為Source的Operator Subtask。每一個(gè)Operator Subtask都是在不同的線程當(dāng)中獨(dú)立執(zhí)行的。一個(gè)Operator的并行度,就等于Operator Subtask的個(gè)數(shù)。
上圖Source的并行度為2。而一個(gè)Stream的并行度就等于它生成的Operator的并行度。數(shù)據(jù)在兩個(gè)operator之間傳遞的時(shí)候有兩種模式:
(1)One to One模式:兩個(gè)operator用此模式傳遞的時(shí)候,會(huì)保持?jǐn)?shù)據(jù)的分區(qū)數(shù)和數(shù)據(jù)的 排序;如上圖中的Source1到Map1,它就保留的Source的分區(qū)特性,以及分區(qū)元素處理的有序性。
(2)Redistributing (重新分配)模式:這種模式會(huì)改變數(shù)據(jù)的分區(qū)數(shù);每個(gè)operator subtask會(huì)根據(jù)選擇transformation把數(shù)據(jù)發(fā)送到不同的目標(biāo)subtasks,比如keyBy()會(huì)通過(guò)hashcode重新分區(qū),broadcast()和rebalance()方法會(huì)隨機(jī)重新分區(qū)。
柚子快報(bào)邀請(qǐng)碼778899分享:Flink教程:并行度
參考鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。