Kafka基礎:表和流的區別 - Edward Loveall

banq發表於2019-08-27

使用Kafka Streams消費主題時, 您需要使用兩種資料。一個是流stream,一個是表table。
我們來看一些資料:

下面是User資料

| key | data                       |
| --- | -------------------------- |
| 17  | name: Gail,  color: Green  |
| 201 | name: Oscar, color: Red    |
| 11  | name: Sam,   color: Purple |
| 201 | name: Oscar, color: Orange |


下面是Purchases資料

| key | data                           |
| --- | ------------------------------ |
| 384 | title: SOAp,       price: $7   |
| 385 | title: TV,         price: $500 |
| 386 | title: Basketball, price: $15  |
| 387 | title: Sunglasses, price: $24  |


這些看起來像表,但不要被愚弄。他們是流。。每次為這些流生成新資料時,都會在流的末尾新增一條新記錄(key附帶data 每一行)。
資料大多是自我解釋的,但User主題topic有兩個條目,用於Oscar, 從Red顏色開始並更改為Orange。這將在以後使用。

所有資料都是流
要清楚一件事,所有Kafka主題都儲存為流。不同之處在於:當我們想要使用該主題時,我們可以將其作為表或流使用。讓我們來看看它們是如何不同的。


以上面的使用者User主題為例。如果我們想要檢視所有使用者及其選擇的顏色,我們只需要檢視最新的每個使用者顏色。我們只要看Oscar和他目前的顏色color。
這就是Kafka Streams中的KTable型別。它從主題中獲取主題記錄流並將其合併為唯一條目。(banq注:類似狀態,將事件播放到最新狀態)


當我們想要使用流時,我們會從中獲取所有記錄。一個很好的例子是上面的Purchase流。如果我們想看看我們賺了多少錢,我們會檢視我們購買主題中的每條記錄,將所有利潤加起來,並獲得我們的數字。
這就是Kafka Streams中的KStream型別。

表是名詞,流是動詞
我發現將表視為代表名詞(使用者,文件,航班)和流作為動詞(購買,編輯,動作)是有幫助的。這是因為對於名詞,我們主要想要該名詞的當前狀態:當前文件或當前航班。但是對於動詞,我們需要看到我們如何到達目標的路徑:本文件編輯的歷史記錄或該飛機到達目的地的路徑。

資源
雖然它們略有不同,但表格有時也稱為a changelog stream。事實上,一切都是流 ,KTables是對流的抽象。類似地,流有時被稱為一個record stream ,並且相同的抽象可用。當你看到卡夫卡時,你可能會看到這種語言。

  • https://docs.confluent.io/current/streams/concepts.html


 

相關文章