1. 程式人生 > >Kafka運行環境優化實踐

Kafka運行環境優化實踐

clas 目錄配置 分布 發送 而不是 優先 提高 影響 分布式消息

Kafka高性能的特點及條件

Kafka是一個高吞吐量分布式消息中間件,並且提供了消息的持久化功能。其高可行有兩個重要的特點:

  • 利用了磁盤連續讀寫性能顯著高於隨機讀寫性能的特點
  • 並發,將一個topic拆分為多個partition

磁盤的連續性

要充分利用磁盤連續讀寫高性能的特點,就意味著要減少操作系統對磁盤的重新調度。kakfa內部的實現非常巧妙:

  • 生產者:網絡==>pagecache(內存)==>磁盤
  • 消費者:磁盤===>網絡,使用sendfile將磁盤數據直接拷貝到網卡發送緩沖區

這樣的設計使得寫磁盤的機會僅僅是pagecache需要flush到磁盤的時候,保證了大多數時候磁盤可以連續地讀取,而且直 接復制到網卡,避免消費影響到生產(寫入內存)。另外,使用文件系統pagecache而不是自建緩存,還利用pagecache對於sendfile來說是透明的優勢,也就是在沒有消息堆積時,數據流動實際時pagecahe直接到網卡,減少磁盤io又保證及時消費。

topic的拆分

kafka讀寫的單位是partition,將一個topic拆分為多個partition提高了系統的吞吐量,這裏有一個前提條件是不同的partition要分布在不同在磁盤上。如果多個partition位於一個磁盤上就以為這有多個進程同時對一個磁盤的多個文件進行讀寫,使得操作系統對磁盤的讀寫進行頻繁的調度,破壞了磁盤讀寫的連續性。

具體的配置上是將不同磁盤的多個目錄配置到broker的log.dirs,例如:

log.dirs=/disk1/logs,/disk2/logs,/disk3/logs

kafka會在新建partition的時候,將新partition分布在partition最少的目錄上,因此,一般不能將同一個磁盤的多個目錄設置到log.dirs。

kafka在虛擬機環境的優化

kafka在虛擬機環境的優化有三點:

  • 組建較大集群,並保證同一個topic的不同partition位於不同虛擬機(所以在不同的磁盤)
  • 監控,對於消費過慢的partition(所在的broker),暫停寫入(生產),等待消費
  • 將kafka安裝在系統盤,數據盤(/opt)完全用於消息存儲。數據盤上不安裝其他服務

內存相關設置

pagecache是linux內核的低優先級緩存,在內存空間富裕的情況下才能獲得較大的空間。並且kafka不自建緩存,堆空間需求也比較小。因此建議保留物理內存的1/2以上給系統,以便保證pagecache的分配。

Kafka運行環境優化實踐