簡體   English   中英

KTables如何獲得其初始值?

[英]How do KTables get their initial values?

最近,我一直在研究Kafka Streams API,在理解KTables方面遇到了一些麻煩。 我想我了解一般概念,但是我在一些細節上苦苦掙扎。

在示例應用程序中,我獲取了一堆價格,然后使用Kafka Streaming API為緊湊的 Kafka主題( Topic-A )生成每種產品的平均價格。 我有第二項服務,我想對這些平均價格更新做出反應。 因此,在第二項服務中,我在Topic-A上創建了一個KTable ,並且可以成功查詢其存儲。

我的目標是擁有第二個服務流程並實時對這些平均價格做出反應,還可以按需獲得每種產品的最新價格。 我相信我可以使用KTable和Store來做到這一點。

最初,我相信:

  • KTable由本地存儲(RocksDB實例)支持
  • 初始化KTable時,它將消耗整個Topic-A來構建其KTable

但是,似乎KTables受到(或可以被?) 壓縮的變更日志支持

  1. 這是否意味着在初始化時,KTable僅需要消耗每個鍵的最新記錄?

  2. 如果我運行第二個服務的多個實例,那么KTables是否共享更改日志? 我想如果實例的數目按比例放大/縮小,則實例將需要更新其本地狀態以說明來自更多/更少分區的數據。

  3. 使用GlobalKTable是否可以為我提供每個實例中可用的所有K / V對?

  1. 這是否意味着在初始化時, KTable僅需要消耗每個鍵的最新記錄?

是的 如果基礎主題中的數據使得每個值代表該鍵的完整最新值,則可以使用cleanup.policy=compact配置該主題,並且Kafka Streams僅需要讀取最新值即可還原KTable (這是一個RocksDB商店)。 在數據建模方面,這是您想要/有意義的唯一一種數據/主題,可以用作KTable輸入。

  1. 如果我運行第二個服務的多個實例,那么KTables共享更改日志?

是的,它們從相同的changelog主題讀取,但是它們根據您在Kafka Streams配置中提供的state.dir參數生成自己的RocksDB存儲。

  1. 使用GlobalKTable為我提供每個實例中可用的所有K / V對?

是的,但GlobalKTables略微更有限,你可以與他們做比普通KTables 我相信新的1.0.0版本為GlobalKTables添加了功能,但是它們仍然有一些限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM