當前位置:
首頁 > 知識 > Kafka Streams 剖析

Kafka Streams 剖析

1.概述

Kafka Streams 是一個用來處理流式數據的庫,屬於Java類庫,它並不是一個流處理框架,和Storm,Spark
Streaming這類流處理框架是明顯不一樣的。那這樣一個庫是做什麼的,能應用到哪些場合,如何使用。筆者今天就給大家來一一剖析這些內容。

2.內容

首先,我們研究這樣一個庫,需要知道它是做什麼的。Kafka
Streams是一個用來構建流處理應用的庫,和Java的那些內置庫一樣,以一種分散式的容錯方式來處理一些事情。當前,業界用於流處理的計算框架包含有:Flink,Spark,Storm等等。Kafka
Streams處理完後的結果可以回寫到Topic中,也可以外接其他系統進行落地。包含以下特性:

  • 事件區分:記錄數據發生的時刻

  • 時間處理:記錄數據被流處理應用開始處理的時刻,如記錄被消費的時刻

  • 開窗

  • 狀態管理:本身應用不需要管理狀態,如若需要處理複雜的流處理應用(分組,聚合,連接等)

Kafka Streams使用是很簡單的,這一點通過閱讀官方的示例代碼就能發現,另外它利用Kafka的並發模型來完成負載均衡。

2.1 優勢

在Kafka集群上,能夠很便捷的使用,亮點如下圖所示:

Kafka Streams 剖析

能夠設計一些輕量級的Client類庫,和現有的Java程序整合

不需要額外的Kafka集群,利用現有的Kafka集群的分區實現水平擴展

容錯率,高可用性

多平台部署,支持Mac,Linux和Windows系統

許可權安全控制

2.2 Sample

Kafka
Streams是直接構建與Kafka的基礎之上的,沒有了額外的流處理集群,Table和一些有狀態的處理完全整合到了流處理本身。其核心代碼非常的簡介。簡而言之,就和你寫Consumer或Producer一樣,但是Kafka
Streams更加的簡潔。

2.3 屬性

Kafka Streams 剖析

3.示例

下面,我們可以通過一個示例代碼,來熟悉Kafka Streams的運行流程,如下所示:

Kafka Streams 剖析

從代碼中,我們可以看出Kafka Streams為上層流定義了兩種基本抽象:

  • KStream:可以從一個或者多個Topic源來創建

  • KTable:從一個Topic源來創建

這兩者的區別是,前者比較像傳統意義上的流,可以把每一個K/V看成獨立的,後者的思想更加接近與Map的概念。同一個Key輸入多次,後者是會覆蓋前者的。而且,KStream和KTable都提供了一系列的轉換操作,每個操作可以產生一個或者多個KStream和KTable對象,所有這些轉換的方法連接在一起,就形成了一個複雜的Topology。由於KStream和KTable是強類型,這些轉換都被定義為通用函數,這樣在使用的時候讓用戶指定輸入和輸出數據類型。

另外,無狀態的轉換不依賴於處理的狀態,因此不需要狀態倉庫。有狀態的轉換則需要進行存儲相應的狀態用於處理和生成結果。例如,在進行聚合操作的時候,一個窗口狀態用於保存當前預定義收到的值,然後轉換獲取累計的值,再做計算。

在處理完後,對於結果集用戶可以持續的將結果回寫到Topic,也可以通過KStream.to() 或者 KTable.to() 方法來實現。

4.總結

通過對Kafka
Streams的研究,它的優勢可以總結為以下幾點。首先,它提供了輕量級並且易用的API來有效的降低流數據的開發成本,之前要實現這類處理,需要使用Spark
Streaming,Storm,Flink,或者自己編寫Consumer。其次,它開發的應用程序可以支持在YARN,Mesos這類資源調度中,使用方式靈活。而對於非同步操作,不是很友好,需要謹慎處理;另外,對SQL語法的支持有限,需要額外開發。

文章摘自博客園


中公優就業 幫你成就職業夢:

IT教育專業培訓:https://www.ujiuye.com/

IT職業在線教育:https://xue.ujiuye.com/

中公優就業「大學生勤工儉學計劃」:http://www.ujiuye.com/zt/qgjx/?wt.bd=pc.shouye

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT優就業 的精彩文章:

徹底理解call()方法、apply()方法和bind()方法
深入理解計算機系統——信息的存儲和表示
10種常見的軟體架構模式
「全面總結」js獲取元素位置大小

TAG:IT優就業 |