redis集羣使用HashMap優化鍵值存儲結構提升存儲性能

項目中遇到Spark Streaming吞吐量太低的問題,redis集羣使用HashMap優化鍵值存儲結構提升Spark Streaming吞吐量。

場景:
設備將運行報文發送到kafka,Spark Streaming對報文進行加工處理,生成6類不同報文信息以json字符串形式set進redis集羣。

問題:
kafka消費速度跟不上。

分析:
對於1000萬設備一個上報週期上報1000萬條報文,極端情況下同時上報,Spark Streaming消費1000萬條報文,生成6000萬個鍵值對存儲入redis集羣。
優化思路,降低Spark Streaming操作redis的頻率,降低key的數量。提升Spark Streaming吞吐量,提升redis集羣的查詢速度以及後續key的更新速度。計劃使用HashMap結構將6類json報文的屬性提取出來作爲HashMap的field。

測試:
相同集羣環境下set操作和hset操作均使用基於Lettuce的Spring data redis客戶端。使用pipliene的方式進行命令提交。每批處理命令1000條。
set模式使用3個json報文共32個屬性,hset模式使用一個相同32屬性的Map。則set模式下存儲報文量爲hset模式下的3倍。

結果:

set hset 速度提升
10萬數量級場景 1.3min(30萬) 51s(10萬) 34%
100萬數量級場景 1.3min(300萬) 51s(100萬) 27%
1000萬數量級場景 1.789hours(3000萬) 1.295hous(1000萬) 27%

結論:
使用HashMap結構降低redsi集羣鍵值數量可以提升存儲性能,提升Spark Streaming吞吐量。提升預估20%~30%,待現網驗證,補充結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章