文章目錄
Kafka Consumer 處理速度緩慢,設定調整紀實
最近專案用了 Kafka 做為中介的 message queue,近期已經陸陸續續開始準備上線的前置作業,其中一項就是壓測數據,不過 Kafka 的 consumer 在核心 component 間處理大量資料的表現非常不好,完全沒有展現出該有的效能水準,於是就得來進行效能調校,但筆記的標題實在不敢提到效能調校,怕被同事幾位大大恥笑 XD, 就簡單紀錄一下我調整的參數值與效能數據結果
基本環境說明
- macOS Mojave 10.14.5
- .NET Core SDK 2.2.107 (.NET Core Runtime 2.2.5)
- Docker version 18.09.2, build 6247962
NuGet package
- Confluent.Kafka 1.0.1
Kafak 環境建置使用 wurstmeister/kafka-docker
情境說明
透過 docker-compose 啟動 kafka 以及 zookeeper,接著使用 console application 傳送 10萬則內容為 20267 字的 message,完成後再啟動 consumer 來接收 message 並計算總耗時
實際執行數據
以下數據單位皆為
毫秒(Milliseconds)
只調整 Consumer 設定
全部預設值
測試序 實際結果 1 27487.108 2 26793.98 3 26173.051 avg 26818.04633 調整 Consumer fetch.max.bytes 為設定值 (52428800) 兩倍
測試序 實際結果 1 26800.383 2 25892.785 3 28924.617 AVG. 27205.92833 調整 Consumer max.partition.fetch.bytes 為設定值 (1048576) 兩倍
測試序 實際結果 1 23810.762 2 23872.324 3 25626.072 AVG. 24436.386 同時調整 fetch.max.bytes 為設定值 (52428800) 兩倍 與 max.partition.fetch.bytes 為設定值 (1048576) 兩倍
測試序 實際結果 1 25317.314 2 24860.095 3 25113.587 AVG. 25096.99867
調整 topic
調整 TOPIC max.message.bytes 為預設值 (1000012) 兩倍
測試序 實際結果 1 26565.841 2 25682.327 3 25744.871 AVG. 25997.67967 調整 TOPIC max.message.bytes 為預設值 (1000012) 兩倍搭 Consumer fetch.max.bytes 為設定值 (52428800) 兩倍
測試序 實際結果 1 25268.01 2 25987.696 3 26499.988 AVG. 25918.56467 調整 TOPIC max.message.bytes 為預設值 (1000012) 兩倍搭 max.partition.fetch.bytes 為設定值 (1048576) 兩倍
測試序 實際結果 1 24769.288 2 25227.366 3 25406.308 AVG. 25134.32067 調整 TOPIC max.message.bytes 為預設值 (1000012) 兩倍 搭 max.partition.fetch.bytes 為設定值 (1048576) 兩倍搭 Consumer fetch.max.bytes 為設定值 (52428800) 兩倍
測試序 實際結果 1 24641.013 2 24487.387 3 24973.881 AVG. 24700.76033
其他嘗試
透過 per tool
測試序 實際結果 1 27108 2 29287 3 28161 AVG. 28185.33333 perf tool thread 2
測試序 實際結果 1 27998 2 29655 3 27693 AVG. 28448.66667 2 broker
測試序 實際結果 1 30833.284 2 27955.218 3 28015.344 AVG. 28934.61533 message 壓縮
壓縮類型 實際結果 None 27445.124 Gzip 4449.036 Snappy 3043.064 Lz4 2675.844 Zstd 3885.105
心得
調整 max.partition.fetch.bytes
看似有效,只是效果不明顯(約 8.8%),而調整 fetch.max.bytes
後速度則沒有顯著改善,加上 topic 的調整也是如此,速度的提升都沒有超過 10%
於是我想到會不會根本不是 c# 程式的問題, 而是 kafka 本身在所設定的情境下就很難有較佳的處理速度,於是改用 kafka 內建的 perf 工具測試,果然證實了我的想法,速度與之前數據差不多
最後嘗試透過壓縮 message payload 的方式來測試,果然速度上得到大量的提昇,上述壓縮測試僅就 consumer 端,如果需要一併考量 producer 的執行效率可以參考 Kafka Producer 不同壓縮方式對發送速度的影響 再選擇壓縮方式
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-03
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。