Kafka Streams

流式數(shù)據(jù)處理的幾個關(guān)鍵點重難點:

  • exactly-once
  • handle out-of-order data
  • one-record-at-a-time processing

kafka Streams 是一個用于實時分析和處理在kafka中數(shù)據(jù)的客戶端庫
它支持:

  • event time
  • processing time
  • windowing
  • 實時app state管理和查詢

kafka Streams自身的一些亮點:

  • 簡單和輕量的客戶端庫,程序開發(fā)完成了蹬癌,直接java jar就可以運行朽肥,這個相對hadoop 砌烁、spark這些集群運行的job來說部署和運行簡單很多
  • 除了apache kafka 之外,不需要依賴其他系統(tǒng)
  • 支持容錯的本地狀態(tài)任岸,比如window join和聚合操作
  • 支持exactly-once語義
  • 支持one-record-at-a-time processing這是真正意義的低延遲實時流(早期的spark是通過small batch實現(xiàn)實時的),支持 event-time based windowing operations
  • 提供了high-level Streams DSLlow-level Processor API的流式處理原語

流式處理拓撲

  • streamKafka Streams最重要的抽象:它代表了無界,源源不斷的數(shù)據(jù)集狐血。stream是有序,可重放易核,不可變data record 的序列匈织,data record 被定義為kv健值對(發(fā)給kakfa的數(shù)據(jù)本身就是kv類型的,不過k可以為空)牡直。在拓撲圖中這種有向數(shù)據(jù)流動邏輯上被抽象為邊
  • stream processing application通過processor topologies定義計算邏輯缀匕。processor topology是由stream processor(節(jié)點)和stream(邊)構(gòu)成的圖
  • stream processorprocessor topology的節(jié)點,它代表了一個處理步驟碰逸,它每次從上游processors讀取一個輸入記錄乡小,對它應(yīng)用操作(算子),然后產(chǎn)生一條或者多條的數(shù)據(jù)發(fā)往下游的processors

在拓撲中有兩種特別的processor

  • source processor 數(shù)據(jù)源節(jié)點饵史,從kafka topic消費數(shù)據(jù)满钟,沒有上游processors
  • sink processor 數(shù)據(jù)最后存儲節(jié)點胜榔,寫到特定的kafka topic 沒有下游processors

Kafka Streams 提供了兩種方式用于定義流式處理拓撲:

  • high-level Streams DSL:定義了一些最常用的轉(zhuǎn)換算子map、 filter湃番、 join 夭织、aggregations
  • low-level Processor API : 允許開發(fā)者定義和連接自定義的processor和與state stores交互相關(guān)的操作

流式處理拓撲只是流式應(yīng)用的邏輯抽象,在運行時吠撮,這個邏輯拓撲會被實例化摔癣,并且分發(fā)到應(yīng)用內(nèi)部用于并行處理。

Time

流處理的關(guān)鍵就是它的時間模型纬向,比如window 操作就是基于時間邊界的:
在流式處理中一般有如下與時間相關(guān)的概念:

  • Event time 數(shù)據(jù)產(chǎn)生時間
  • Ingestion time kafka 收到數(shù)據(jù)的時間
  • Processing time 數(shù)據(jù)處理時間

舉個例子理解以上時間的概覽:
考慮如下場景择浊,手機上的一款app將用戶日志數(shù)據(jù)上報到服務(wù)端Kafka,然后app 公司的開發(fā)者開發(fā)了一個實時處理程序逾条,實時的從kakfa中獲取用戶上報信息琢岩,統(tǒng)計dua。

我們分析一條日志在手機上產(chǎn)生师脂,然后上報到kafka集群担孔,最后由流式程序取出來用于統(tǒng)計這個過程,其中Event time為app 日志在手機上產(chǎn)生的時間吃警,Ingestion time為數(shù)據(jù)上報到kafka的時間糕篇,流式程序取出這個日志數(shù)據(jù)并且進行處理的時間為Processing time

State

實現(xiàn)無狀態(tài)流式應(yīng)用比較簡單,比如僅僅是從一個流中過濾數(shù)據(jù)然后發(fā)往下一個流
當需要對事件進行count酌心,avg拌消,或者多個時間join時就需要維持狀態(tài)了,一般流式程序有如下幾種狀態(tài):

  • Local or internal state(本地狀態(tài))本地狀態(tài)直接使用本地內(nèi)存,優(yōu)點是快
  • External state(外部狀態(tài))使用外部系統(tǒng)保存狀態(tài)安券,通常是NoSQL

Duality of Streams and Tables

high-level Streams DSL中提供了對流和表的抽象墩崩,分別對應(yīng)KStreamKTable

  • 表可以看作是當前事件信息的一個快照
  • 流則是事件的changlog
    Duality of Streams and Tables這句話是說在kafka streamsKStreamKTable是可以相互轉(zhuǎn)化的

Windowing

在流上很多操作都是window操作,也就是在一個時間片上的操作 比如:

  • moving average
  • 一天發(fā)生事件的top N
  • join,對相同時間片的事件join

進行window操作時侯勉,我們需要確定如下條件:

  • 窗口的大叙谐铩(window size): 每個窗口包含1s 還是1min 還是5min的事件,
  • 窗口移動的頻率(advance interval) : 窗口是每秒更新址貌,還是每分鐘更新铐拐,還是每到一個新的事件就更新,窗口大小和窗口移動頻率一致稱之為tumbling window,每到一個新的事件就更新的窗口稱之為sliding window
  • 對延遲數(shù)據(jù)的更新策略:比如可以定義延遲一個小時的數(shù)據(jù)落在指定窗口視為有效數(shù)據(jù)练对,參與計算遍蟋,大于一小時的數(shù)據(jù)可以直接丟棄(關(guān)于亂序數(shù)據(jù)的產(chǎn)生和影響,參考Out-of-Order Handling)


    window

Out-of-Order Handling

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锹淌,一起剝皮案震驚了整個濱河市匿值,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赂摆,老刑警劉巖挟憔,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钟些,死亡現(xiàn)場離奇詭異,居然都是意外死亡绊谭,警方通過查閱死者的電腦和手機政恍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來达传,“玉大人篙耗,你說我怎么就攤上這事∠芨希” “怎么了宗弯?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長搂妻。 經(jīng)常有香客問我蒙保,道長,這世上最難降的妖魔是什么欲主? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任邓厕,我火速辦了婚禮,結(jié)果婚禮上扁瓢,老公的妹妹穿的比我還像新娘详恼。我一直安慰自己,他們只是感情好引几,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布昧互。 她就那樣靜靜地躺著,像睡著了一般她紫。 火紅的嫁衣襯著肌膚如雪硅堆。 梳的紋絲不亂的頭發(fā)上屿储,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天贿讹,我揣著相機與錄音,去河邊找鬼够掠。 笑死民褂,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的疯潭。 我是一名探鬼主播赊堪,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼竖哩!你這毒婦竟也來了哭廉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤相叁,失蹤者是張志新(化名)和其女友劉穎遵绰,沒想到半個月后辽幌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡椿访,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年乌企,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片成玫。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡加酵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哭当,到底是詐尸還是另有隱情猪腕,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布钦勘,位于F島的核電站码撰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏个盆。R本人自食惡果不足惜脖岛,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望颊亮。 院中可真熱鬧柴梆,春花似錦、人聲如沸终惑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雹有。三九已至偿渡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間霸奕,已是汗流浹背溜宽。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留质帅,地道東北人适揉。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像煤惩,于是被迫代替她去往敵國和親嫉嘀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354