Kafka基礎:表和流的區別 - Edward Loveall
使用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
相關文章
- 基礎——堆和棧的區別
- Java基礎- ==和equals和hashCode的區別Java
- [sass 基礎] .sass 和 .scss 區別CSS
- 基礎才是重中之重~lock和monitor的區別
- C++基礎(八)struct和class的區別C++Struct
- 跡線和流線的區別
- Vue 基礎自查——watch、computed和methods的區別Vue
- 工作流(Workflow)和BPM的區別
- jQuery基礎與js的區別jQueryJS
- kafka基礎原理Kafka
- 檢視和表的區別
- Java基礎-成員變數和區域性變數的區別Java變數
- 基礎-JAVA集合型別主要區別Java型別
- 廣告基礎知識-SEO和sem的區別有什麼
- python基礎(8)python中is和==的區別詳解Python
- 『現學現忘』Git基礎 — 2、Git和SVN的區別Git
- C#基礎加強三:Dispose() 和 Close() 和 Finalize() 的區別C#
- Hive內部表和外部表的區別Hive
- Python基礎 - 檔案和流Python
- Linux和Windows有啥區別?Linux基礎LinuxWindows
- ETL中雙流合併和多流合併的區別
- Kafka基礎入門Kafka
- kafka及redis基礎KafkaRedis
- Kafka基礎認識Kafka
- kafka 基礎介紹Kafka
- kafka基礎介紹Kafka
- Kafka 基礎知識Kafka
- kafka基礎學習Kafka
- Java基礎-- ==號與equals()方法的區別Java
- SAP SD 基礎知識之Cash Sales和Rush Order的區別
- [java基礎]StringBuilder和StringBuffer的3個區別JavaUI
- Python中tuple和list的區別?Python基礎學習!Python
- Linux和Unix的區別是什麼?Linux基礎教程Linux
- 記憶體表和臨時表的區別記憶體
- python基礎-檔案讀寫'r' 和 'rb'區別Python
- IO流上:概述、字元流、緩衝區(java基礎)字元Java
- kafka基礎知識梳理Kafka
- Kafka基礎入門篇Kafka