原创 Flink運行時之批處理程序生成計劃

批處理程序生成計劃 DataSet API所編寫的批處理程序跟DataStream API所編寫的流處理程序在生成作業圖(JobGraph)之前的實現差別很大。流處理程序是生成流圖(StreamGraph),而批處理程序是生成計劃

原创 Flink運行時之流處理程序生成流圖

流處理程序生成流圖 DataStream API所編寫的流處理應用程序在生成作業圖(JobGraph)並提交給JobManager之前,會預先生成流圖(StreamGraph)。 什麼是流圖 流圖(StreamGraph)是表示

原创 Flink之CEP-API簡介

CEP API的核心是Pattern API,它允許你快速定義複雜的事件模式。每個模式包含多個階段(stage)或者我們也可稱爲狀態(state)。爲了從一個狀態切換到另一個狀態,用戶可以指定條件,這些條件可以作用在鄰近的事件或獨

原创 Flink之CEP案例分析-網絡攻擊檢測

上一篇我們介紹了Flink CEP的API,這一篇我們將以結合一個案例來練習使用CEP的API編寫應用程序,以強化對API的理解。所選取的案例是對網絡遭受的潛在攻擊進行檢測並給出告警。當下互聯網安全形勢仍然嚴峻,網絡攻擊屢見不鮮且

原创 Flink運行時之基於Netty的網絡通信中

PartitionRequestClient 分區請求客戶端(PartitionRequestClient)用於發起遠程PartitionRequest請求,它也是RemoteChannel跟Netty通信層之間進行銜接的對象。

原创 Flink運行時之生成作業圖

生成作業圖 在分析完了流處理程序生成的流圖(StreamGraph)以及批處理程序生成的優化後的計劃(OptimizedPlan)之後,下一步就是生成它們面向Flink運行時執行引擎的共同抽象——作業圖(JobGraph)。 什

原创 Flink運行時之基於Netty的網絡通信上

概述 本文以及接下來的幾篇文章將介紹Flink運行時TaskManager間進行數據交換的核心部分——基於Netty通信框架遠程請求ResultSubpartition。作爲系列文章的第一篇,先列出一些需要了解的基礎對象。 Net

原创 Flink運行時之統一的數據交換對象

統一的數據交換對象 在Flink的執行引擎中,流動的元素主要有兩種:緩衝(Buffer)和事件(Event)。Buffer主要針對用戶數據交換,而Event則用於一些特殊的控制標識。但在實現時,爲了在通信層統一數據交換,Flink

原创 Flink運行時之合久必分的特定任務

合久必分的特定任務 前面我們談到了TaskManager對每個Task實例會啓動一個獨立的線程來執行。在分析線程執行的核心代碼時,我們看到最終執行的是AbstractInvokable這樣執行體的invoke方法。所謂合久必分,鑑

原创 Flink-CEP論文與源碼解讀之狀態與狀態轉換

Flink CEP的論文與設計 Flink的CEP設計與實現重度參考了論文《Efficient Pattern Matching over Event Streams》。下面我們就來結合論文談談Flink CEP的設計。 這篇論

原创 Flink運行時之網絡通信NetworkEnvironment分析

網絡環境(NetworkEnvironment)是TaskManager進行網絡通信的主對象,主要用於跟蹤中間結果並負責所有的數據交換。每個TaskManager的實例都包含一個網絡環境對象,在TaskManager啓動時創建。N

原创 Flink運行時之生產端結果分區

生產端結果分區 生產者結果分區是生產端任務所產生的結果。以一個簡單的MapReduce程序爲例,從靜態的角度來看,生產端的算子(Map)跟消費端的算子(Reduce),兩者之間交換數據通過中間結果集(IntermediateRes

原创 Flink運行時之TaskManager執行Task

TaskManager執行任務 當一個任務被JobManager部署到TaskManager之後,它將會被執行。本篇我們將分析任務的執行細節。 submitTask方法分析 一個任務實例被部署所產生的實際影響就是JobManag

原创 Flink運行時之通信層API

上圖中紅框部分即爲通信層API。 通信層API 通信層API介於任務執行與通信細節之間,主要用於對上層任務執行提供記錄的讀寫服務同時屏蔽底層的通信細節。主要包括三個部件:將記錄寫入結果分區的寫入器、將數據從輸入網關中讀出並反

原创 Flink運行時之結果分區消費端

結果分區消費端 在前一篇,我們講解了生產者分區,生產者分區是生產者任務生產中間結果數據的過程。消費者任務在獲得結果分區可用的通知之後,會發起對數據的請求。我們仍然以生產者分區的例子作爲假設,其在消費端示意圖如下: 可以看到在