簡體   English   中英

Kafka 流 state 存儲是為了什么?

[英]Kafka streams state store for what?

正如我從書中得到的那樣,Kafka Streams state 存儲它是一個 memory 鍵/值存儲,用於將數據存儲到 Kafka 或過濾后。

我對一些理論問題感到困惑。

  1. Kafka 流 state 與另一個 memory 存儲(如 Redis 等)有何不同?
  2. 在 Kafka Streams 中使用 state 存儲的真實案例是什么?
  3. 為什么主題不能替代 state 存儲?

為什么主題不能替代 state 存儲?

主題包含按通常表示日志的順序排列的消息。

有時,我們希望聚合這些消息,對它們進行分組並執行一個操作,例如sum,並將其存儲在我們以后可以使用key檢索的地方。 在這種情況下,理想的解決方案是使用鍵值存儲而不是日志結構的主題。

在 Kafka Streams 中使用 state 存儲的真實案例是什么?

一個簡單的用例是字數統計,其中我們有一個單詞和一個出現多少次的計數器。 您可以在 github 上的 kafka-streams-examples中查看更多示例。

來自另一個 memory 存儲(如 Redis 等)的 Kafka 流 state 有什么區別?

State 可以被視為一個保存點,您可以從中恢復數據處理,或者它可能還包含進一步處理所需的一些有用信息(例如我們需要增加的先前字數),因此可以使用RedisRocksDBPostgres

Redis 可以是 Kafka 流 state 存儲的插件,但是 Kafka 流的默認持久 state 存儲是RocksDB

因此, Redis 不是 Kafka 流 state 的替代品,而是 Kafka 流的默認RocksDB的替代品。

- 為什么主題不能替代 state 存儲?

主題引擎蓋下的最終 statestore 存儲(一切都是 kafka 中的主題)

如果您創建一個名為“myStream”的微服務和一個名為“MyState”的 statestore,您將看到一個 myStream-MyState-changelog,其中包含 statestore 中所有更改的歷史記錄。

RocksDB 只是為了提高性能的本地緩存,在本地磁盤上進行了第一層本地備份,但最終真正的高可用和一次性處理的保證是由底層的 changelog topic 提供的。

  • Kafka 流 state 與另一個 memory 存儲(如 Redis 等)有何不同?
  • 在 Kafka Streams 中使用 state 存儲的真實案例是什么?

它不是存儲,它只是一種本地的、高效的、有保證的 memory state 來管理一些業務案例是一種完全流式傳輸的方式。 舉個例子:

對於每個傳入訂單(主題 1),我想在過去 6 小時內找到任何先前的訂單(主題 2)到同一位置

暫無
暫無

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

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