從 Kafka 命令列發送鍵/值訊息
1. 概述
在本教程中,我們將學習兩種從 Kafka 命令列發送鍵/值訊息的方法。
確保特定主題上的訊息的順序是處理金融交易、預訂、線上購物等的現實事件驅動系統中的常見要求。
2. 前提條件
在從命令列發送鍵/值訊息之前,我們需要檢查一些事情。
首先,我們需要一個正在運行的 Kafka 實例。如果沒有可用的,我們可以使用 Kafka Docker 或 Kafka 快速入門指南來設定工作環境。我們將繼續進行以下部分,假設我們有一個可在kafka-server:9092存取的工作 Kafka 環境。
接下來,讓我們考慮從命令列發送的訊息是支付系統的一部分。這是對應的模型類別:
public class PaymentEvent {
private String reference;
private BigDecimal amount;
private Currency currency;
// standard getters and setters
}
另一個先決條件是能夠存取 Kafka CLI 工具,這是一個簡單的過程。我們必須下載Kafka 版本,解壓縮下載的文件,然後導航到解壓縮的資料夾。 Kafka CLI 工具現在位於bin資料夾中。我們將考慮以下部分中的所有 CLI 命令都在提取的 Kafka 資料夾位置中執行。
接下來,讓我們建立將在其中發送訊息的payments主題:
bin/kafka-topics.sh --create --topic payments --bootstrap-server kafka-server:9092
我們應該在控制台中看到以下訊息,表明主題已成功建立:
Created topic payments.
最後,我們還創建一個關於payments主題的 Kafka 消費者來測試訊息是否正確發送:
bin/kafka-console-consumer.sh --topic payments --bootstrap-server kafka-server:9092 --property "print.key=true" --property "key.separator=="
請注意上一個指令末尾的print.key屬性。如果沒有明確將該屬性設為true ,使用者不會列印訊息鍵。我們也覆寫key.separator屬性的預設值( \t製表符),以使內容與以下部分中產生訊息的方式保持一致。
我們現在準備開始從命令列發送鍵/值訊息。
3. 從命令列發送鍵/值訊息
我們使用Kafka 控制台生產者**從命令列發送鍵/值訊息**:
bin/kafka-console-producer.sh --topic payments --bootstrap-server kafka-server:9092 --property "parse.key=true" --property "key.separator=="
當我們想要從 CLI 提供訊息密鑰以及訊息有效負載時,需要在上一個命令末尾提供的parse.key和key.separator屬性。
運行上一個命令後,會出現一個提示,我們可以在其中提供訊息密鑰和訊息負載:
>KEY1={"reference":"P000000001", "amount": "37.75", "currency":"EUR"}
>KEY2={"reference":"P000000002", "amount": "2", "currency":"EUR"}
從消費者輸出我們可以看到訊息密鑰和訊息負載都已從命令列正確地發送:
KEY1={"reference":"P000000001", "amount": "37.75", "currency":"EUR"}
KEY2={"reference":"P000000002", "amount": "2", "currency":"EUR"}
4. 從文件發送鍵/值訊息
從命令列發送鍵/值訊息的另一種方法是使用檔案。讓我們看看這是如何工作的。
首先,我們建立payment-events.txt文件,內容如下:
KEY3={"reference":"P000000003", "amount": "80", "currency":"SEK"}
KEY4={"reference":"P000000004", "amount": "77.8", "currency":"GBP"}
現在,讓我們啟動控制台產生器並使用payment-events.txt檔案作為輸入:
bin/kafka-console-producer.sh --topic payments --bootstrap-server kafka-server:9092 --property "parse.key=true" --property "key.separator==" < payment-events.txt
查看消費者輸出,我們可以看到這次訊息密鑰和訊息有效負載也都正確發送:
KEY3={"reference":"P000000003", "amount": "80", "currency":"SEK"}
KEY4={"reference":"P000000004", "amount": "77.8", "currency":"GBP"}
5. 結論
在本文中,我們學習如何從 Kafka 命令列發送鍵/值訊息。我們也看到了使用現有文件發送一批事件的替代方法。當我們想要確保在特定主題上傳遞訊息同時保持訊息順序時,這些方法被證明是有用的。