elasticsearch 結合 flink,kafka 性能調優經驗


1. 產品的架構是數據采集到 kafka,由 flink 讀取,送入ES

2. 這個過程中,涉及: kafka分區數,flink並行度,ES 分區數和副本

3. kafka 分區數決定了后面 flink 的並行度,最好是 kafka 的分區數和 flink 的並行度一致,flink的並行度最好和ES的分片數相等,這樣能並行寫入;

4. 寫入 ES 時,需要先決定是按天建立索引還是按月建立索引,我一般是跨度超過1年的離線數據按月建立索引,跨度不超過一個月的數據按天建立索引;另外還需要考察一天或者一個月中的數據量,如果數據量超過幾十億,分片數最好設的大一點,設置成10個以上,可以加快查詢

5. 寫入ES時,可以將副本數暫時設置為 0,以提高寫入速度,寫入完成后,可以將副本數動態修改為 1或者2;

6. 使用 kibana 對 ES 性能進行監控,Kinban 對ES的監控非常完善,足以滿足需求;

7. 使用 Kibana 監控如果發現 ES 的 index rate 與理論值相差甚遠,就要想辦法提高速度,主要有兩個辦法,分別是針對單個任務的提高速度以及建立多個任務提高速度

  > 單個任務提高速度可以使用並行寫入,主要是 kafka 分區數設置的多一些,flink 任務的並行度與kakfa分區數一致,但是這種方法有時候並不能提高速度,因為寫入速度還受到其他因素影響,例如寫入數據的復雜度,IO等;

  > 如果單個任務不能使 ES 接近理論速度,可以同時跑多個ES寫入任務,例如A、B、C三個任務,A任務雖然只有理論值的一半(可能是寫入的數據格式比較復雜),但是如果IO沒有達到瓶頸,通過通過疊加B、C兩個任務來使 ES 接近理論速度;

 

下圖是不同參數調價下的ES index 速率和 segment count值

第一個波峰的index rate 在 1200/s 參數為 3 個 shard, 3個 replica, refresh rate = 1s

第二個波峰的 index rate 在 2500/s 參數為 3個 shard, 0 個 replica, refresh rate = 12s

第三個波峰采用 2 個並發寫入,index rate 約為 5000/s,參數為 3個 shard, 0個 replica, refresh rate = 12s

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM