1. 程式人生 > >Kafka安裝配置之Broker配置

Kafka安裝配置之Broker配置

 

                           Kafka安裝配置之Broker配置

常規配置:

  • broker.id

每個broker都需要有一個識別符號,使用broker.id來表示。它的預設值是0,也可以被設定成其他的任意整數。這個值在整個Kafka叢集裡必須是唯一的。

  • port

如果使用配置樣本來啟動Kafka,他會監聽9092埠,可以修改為其他任意可用埠,如果使用1024以下的埠,需要使用root許可權啟動kafka。

  • zookeeper.connect

用於儲存元素據的Zookeeper地址是通過zookeeper.connect來指定的。該配置引數是用冒號分隔的一組hostname:port/path列表。含義如下:
            hostname:是zookeeper伺服器的機器或ip地址;
            port:是zookeeper客戶端連線埠
            /path:是可選的zookeeper路徑,作為kafka叢集的chroot環境,如果不指定,預設使用根路徑。

  • log.dirs

如果指定了多個路徑,那麼broker會根據“最少使用”原則,把同一個分割槽的日誌片段儲存到同一個路徑下。

  • num.recovery.threads.per.data.dir

預設情況下,每個日誌目錄只是用一個執行緒。所配置的數字對應的是log.dirs指定的單個日誌目錄。也就是說,如果num.recovery.threads.per.data.dir被設定為8,並且log.dirs制定了3個路徑,那麼總共需要24個執行緒。

  • auto.create.topic.enable

預設情況下,kafka會在如下情形下自動建立主題:

                    當一個生產者開始往主題寫入訊息時;

                    當一個消費者開始往主題讀取訊息時;

                    當任意一個客戶端向主題傳送元資料請求時;

如果顯式建立主題,不管是手動還是通過其他配置系統建立,都可以將其設為false。

 

預設配置:

  • num.partition

指定新建立的主題將包含多少分割槽。該引數預設值是1,要注意,我們可以增加主題的分割槽個數,但是不能減少分割槽的個數。

  • log.retention.ms

kafka預設使用log.retention.hours引數來配置時間,預設是168小時。還有其他兩個引數:log.retention.minutes、log.retention.ms,三個引數作用是一樣的,推薦使用log.retention.ms。如果配置了不止一個引數,kafka會優先選擇最小的引數。

  • log.retention.bytes

kafka通過設定保留的訊息位元組數來判斷訊息是否過期,該配置作用在每個分割槽上,也就是說,如果一個包含8個分割槽的主題,並且log.retention.bytes被設定為1GB,那麼該主題最多可保留8GB資料。如果同時設定了log.retention.bytes、log.retention.ms(或者其他時間引數)只要任意一個條件得到滿足,訊息就會被刪除。

  • log.segment.bytes

以上的設定都作用在日誌片段上,而不是作用在單個訊息上。當訊息到達broker時,它們被追加到分割槽的當前日誌片段上。當日志片段大小達到log.segment.bytes指定的上限(預設為1GB)時,當前日誌片段就會被關閉,一個新的日誌片段被開啟。如果主題的訊息量不大,那麼如何調整這個引數大小變的尤為重要。例如:如果一個主題每天只接收100MB的訊息,而log.segment.bytes使用預設設定,那麼需要10天時間才能填滿一個日誌片段。因為在日誌片段被關閉之前訊息時不會過期的,所有如果log.retention.ms設定為60480000(7天),那麼日誌片段最多需要17天才會過期。這是因為關閉日誌片段需要10天的時間,而根據配置的過期時間,還需要再保留7天,因為要等到日誌片段裡的最後一個訊息過期才能被刪除。

日誌片段的大小會影響使用時間戳獲取偏移量。在使用時間戳獲取日誌偏移量時,Kafka會檢查分割槽裡最後修改時間大於指定時間戳的日誌片段(已經被關閉的),該日誌片段的前一個檔案的最後修改時間小於指定時間戳,然後,kafka返回該日誌片段(也就是檔名)開頭的偏移量。對於使用時間戳獲取偏移量的操作來說,日誌片段越小,結果越準確。

  • log.segment.ms

它指定了多長時間之後日誌片段會被關閉,和log.segment.bytes之間也不存在互斥問題,日誌片段會在大小或時間達到上限時被關閉,就看哪個引數先滿足條件。預設情況下,log.segment.ms沒有設定值,所以只根據大小來關閉日誌片段。在使用基於時間的日誌片段時,如果多個分割槽的日誌片段永遠不能達到大小的上限,就會發生對磁碟的影響,因為broker在啟動之後就開始計算日誌片段的過期時間,對於那些資料量小的分割槽來說,日誌片段的關閉總是同時發生。

  • message.max.bytes

broker通過設定message.max.bytes引數來限制單個訊息的大小,預設時1000000,也就是1MB。該引數指的是壓縮後的訊息大小。這個值對效能有顯著的影響。值越大,那麼負責處理網路連線和請求的執行緒就需要花越多的時間來處理這些請求,他還會增加磁碟寫入塊的大小,從而影響IO吞吐量。

消費者和客戶端設定的fetch.message.max.bytes必須與伺服器設定的訊息大小進行協調。如果這個值比message.max.bytes小,那麼消費者就無法讀取到比較大的訊息,導致消費者被阻塞。為叢集broker配置replica.fetch.max.bytes引數時,也遵循此原則