[英]How do KTables get their initial values?
最近,我一直在研究Kafka Streams API,在理解KTables方面遇到了一些麻煩。 我想我了解一般概念,但是我在一些細節上苦苦掙扎。
在示例應用程序中,我獲取了一堆價格,然后使用Kafka Streaming API為緊湊的 Kafka主題( Topic-A )生成每種產品的平均價格。 我有第二項服務,我想對這些平均價格更新做出反應。 因此,在第二項服務中,我在Topic-A上創建了一個KTable
,並且可以成功查詢其存儲。
我的目標是擁有第二個服務流程並實時對這些平均價格做出反應,還可以按需獲得每種產品的最新價格。 我相信我可以使用KTable和Store來做到這一點。
最初,我相信:
但是,似乎KTables受到(或可以被?) 壓縮的變更日志支持 。
這是否意味着在初始化時,KTable僅需要消耗每個鍵的最新記錄?
如果我運行第二個服務的多個實例,那么KTables是否共享更改日志? 我想如果實例的數目按比例放大/縮小,則實例將需要更新其本地狀態以說明來自更多/更少分區的數據。
使用GlobalKTable是否可以為我提供每個實例中可用的所有K / V對?
- 這是否意味着在初始化時,
KTable
僅需要消耗每個鍵的最新記錄?
是的 如果基礎主題中的數據使得每個值代表該鍵的完整最新值,則可以使用cleanup.policy=compact
配置該主題,並且Kafka Streams僅需要讀取最新值即可還原KTable
(這是一個RocksDB商店)。 在數據建模方面,這是您想要/有意義的唯一一種數據/主題,可以用作KTable
輸入。
- 如果我運行第二個服務的多個實例,那么
KTables
共享更改日志?
是的,它們從相同的changelog主題讀取,但是它們根據您在Kafka Streams配置中提供的state.dir
參數生成自己的RocksDB存儲。
- 使用
GlobalKTable
為我提供每個實例中可用的所有K / V對?
是的,但GlobalKTables
略微更有限,你可以與他們做比普通KTables
。 我相信新的1.0.0版本為GlobalKTables
添加了功能,但是它們仍然有一些限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.