我們在學習kafka的過程中最不習慣的就是不管什麼樣的資料, 在kafka的傳輸過程都會是binary的資料格式, 因此我們在撰寫程式的過程中並不是那麼的直觀, 必須將資料從float、int…資料型態轉型成binary才能順利傳送, 那麼基於這樣的前提之下, python這套程式語言可以怎麼做呢?
如果您還不知道kafka是什麼? 歡迎加入「🔒 阿Han的軟體心法實戰營 - kafka專區」一起學習, 讓您的系統架構更為即時, 而這個篇章正是您在kafka的程式撰寫之中會使用到的一個環節。
這張表在底下的範例中會常常出現的符號, 至於對應的資料型態是什麼就可以回來看看這張表做為一個對應。
將變數打包成binary, if代表整數跟浮點數
import struct
# 打包一個有符號整數 (i) 和一個浮點數 (f)
data = struct.pack('if', 42, 3.14)
# 打印結果為二進制數據
print(data)
將binary解包成變數,if代表整數跟浮點數
import struct
# 解包先前打包的數據
data = struct.pack('if', 42, 3.14)
result = struct.unpack('if', data)
# 打印解包後的結果
print(result) # 輸出 (42, 3.140000104904175)
# 對標頭裡的欄位進行編碼
headers = {
'ratio': struct.pack('f', 0.14159),
}
# 生產訊息到kafka
producer.produce(
topic='xxx',
value='xxx',
headers=headers,
)
# === [producer] => [kafka] => [consumer] ======
# 消費者拉訊息
msg = consumer.poll(1.0)
headers = msg.headers()
headers = {x[0]: x[1] for x in headers}
ratio = struct.unpack('f', headers['ratio'])[0]
print(ratio)
內建於Python模組, 怎麼能不好好運用呢? struct模組在進行二進制資料格式的時候非常有用, 讓我們一起學起來用用看吧!