Apache Kafka中的交互式查詢

交互式查詢旨在使開發人員能夠訪問流處理應用程序的內部狀態或狀態存儲。在這篇文章中,我們將學習如何使用它們!

Apache Kafka中的交互式查詢

Apache Kafka v0.10引入了一項新功能 Kafka Streams API - 一個客戶端庫,可用於構建應用程序和微服務,其中輸入和輸出數據可以存儲在Kafka集群中。

Kafka Streams提供狀態存儲,流處理應用程序可以使用它來存儲和查詢數據。Kafka Streams中的每個任務都使用一個或多個狀態存儲,可以通過API訪問這些狀態存儲來存儲和查詢處理所需的數據。這些狀態存儲可以是持久鍵值存儲,內存中散列映射或其他方便的數據結構。它還為本地國營商店提供容錯和自動恢復功能。

Kafka Streams允許通過方法,進程或外部應用程序對這些狀態存儲進行只讀查詢。這是通過名為Interactive Queries的功能提供的。交互式查詢旨在使開發人員能夠訪問流處理應用程序(KIP-67)的內部狀態或狀態存儲。

消除對外部數據庫的需求

使用Interactive Queries和Apache Kafka,我們可以通過Interactive Query API使應用程序的所有狀態都可查詢,從而消除對外部數據庫的需求。

Apache Kafka中的交互式查詢

Kafka Streams庫通過嵌入式數據庫維護內部狀態(默認為RocksDB,但可以插入自己的數據庫)。現在,這些嵌入式數據庫充當了存儲在Apache Kafka中的日誌的物化視圖。藉助Interactive Queries,我們可以直接將此嵌入狀態公開給應用程序。

使Kafka Streams應用程序可查詢

Kafka Streams處理大多數低級查詢,元數據發現和數據容錯。根據應用程序,可以直接查詢而無需額外工作(本地狀態存儲),或者可能必須為分佈式查詢(遠程狀態存儲)實現間接層。

查詢當地國家商店

由於Kafka Streams應用程序通常在多個實例上運行,因此任何給定實例上本地可用的狀態僅是應用程序整個狀態的子集。在實例上查詢本地狀態存儲會返回該特定實例上本地可用的數據。

Apache Kafka中的交互式查詢

下面的示例有一個kStream of textLines,它還創建了一個名為“ CountsKeyValueStore” 的鍵值存儲,它將負責保存在“word-count-input”主題上找到的任何單詞的最新計數。

Apache Kafka中的交互式查詢

應用程序啟動後,您可以CountsKeyValueStore使用ReadOnlyKeyValueStore API 查詢“ ”。它可以通過以下方式完成:

Apache Kafka中的交互式查詢

查詢遠程狀態商店

要查詢整個應用程序的遠程狀態,必須將應用程序的完整狀態公開給其他應用程序,包括在不同計算機上運行的應用程序。

Apache Kafka中的交互式查詢

以下是查詢遠程狀態存儲並使流處理應用程序的完整狀態可查詢所需的步驟:

  • 嚮應用程序添加RPC層
  • 這有助於您的應用程序實例通過網絡進行交互。
  • RPC層應嵌入Kafka Streams應用程序中,並公開一個端點,應用程序實例和應用程序可通過該端點連接到該端點。
  • 公開RPC端點
  • 要在分佈式Kafka Streams應用程序中啟用遠程狀態存儲發現,必須使用Kafka Streams 的application.server配置設置公開應用程序實例的RPC終結點。
  • 此配置屬性的值對於應用程序的每個實例都是唯一的。
  • 它有助於通過StreamsMetadata實例跟蹤應用程序的每個實例,其狀態存儲和分配的流分區的RPC端點信息。
  • 發現遠程應用程序實例及其狀態存儲
  • RPC層應發現遠程應用程序實例及其狀態存儲,並查詢本地可用的狀態存儲,以使應用程序的完整狀態可查詢。
  • 如果特定實例缺少用於響應查詢的本地數據,則遠程應用程序實例可以將查詢轉發到其他應用程序實例。本地可用的狀態存儲可以直接響應查詢。

每天小編都會和大家分享乾貨,你們的點贊和關注就是對我最大的支持!(重要的事說3遍)


分享到:


相關文章: