Kafka學習之broker配置(0.8.1版)

broker.id  默認值:無

每一個broker都有一個唯一的id,這是一個非負整數,這個id就是broker的"名字",這樣就允許broker遷移到別的機器而不會影響消費者。你可以選擇任意一個數字,只要它是唯一的。

 

log.dirs 默認值:/tmp/kafka-logs

一個用逗號分隔的目錄列表,可以有多個,用來爲Kafka存儲數據。每當需要爲一個新的partition分配一個目錄時,會選擇當前的存儲partition最少的目錄來存儲。

 

port 默認值:6667

server用來接受client請求的端口。

 

zookeeper.connect 默認值:null

指定了ZooKeeper的connect string,以hostname:port的形式,hostname和port就是ZooKeeper集羣各個節點的hostname和port。ZooKeeper集羣中的某個節點可能會掛掉,所以可以指定多個節點的connect string。如下所式:

hostname1:port1,hostname2:port2,hostname3:port3.

 

ZooKeeper也可以允許你指定一個"chroot"的路徑,可以讓Kafka集羣將需要存儲在ZooKeeper的數據存儲到指定的路徑下這可以讓多個Kafka集羣或其他應用程序公用同一個ZooKeeper集羣。可以使用如下的connect string:

hostname1:port1,hostname2:port2,hostname3:port3/chroot/path

這樣就可以講這個集羣的所有數據存放在/chroot/path路徑下。注意在啓動集羣前,一定要先自己創建這個路徑,consumer也得使用相同的connect string。

 

message.max.bytes 默認值:1000000

server能接收的一條消息的最大的大小。這個屬性跟consumer使用的最大fetch大小是一致的,這很重要,否則一個不守規矩的producer會發送一個太大的消息。

 

num.network.threads 默認值:3

處理網絡的線程的數量,server端用來處理網絡請求,一般不需要改變它。

 

num.io.threads 默認值:8

server端處理請求時的I/O線程的數量,不要小於磁盤的數量。

 

background.threads 默認值:4

用來處理各種不同的後臺任務的線程數量,比如刪除文件,一般不需要改變它。

 

queued.max.requests 默認值:500

I/O線程等待隊列中的最大的請求數,超過這個數量,network線程就不會再接收一個新的請求。

 

host.name 默認值:null

broker的hostname,如果設置了它,會僅綁定這個地址。如果沒有設置,則會綁定所有的網絡接口,並提交一個給ZK。

 

advertised.host.name 默認值:null

如果設置了這個hostname,會分發給所有的producer,consumer和其他broker來連接自己。

 

advertised.port 默認值:null

分發這個端口給所有的producer,consumer和其他broker來建立連接。如果此端口跟server綁定的端口不同,則纔有必要設置。

 

socket.send.buffer.bytes 默認值:100 * 1024

server端用來處理socket連接的SO_SNDBUFF緩衝大小。

 

socket.receive.buffer.bytes 默認值:100 * 1024

server端用來處理socket連接的SO_RCVBUFF緩衝大小。

 

socket.request.max.bytes 默認值:100 * 1024 * 1024

server能接受的請求的最大的大小,這是爲了防止server跑光內存,不能大於Java堆的大小。

 

num.partitions 默認值:1

如果在創建topic的時候沒有指定partition的數量,則使用這個值來設置。

 

log.segment.bytes 默認值:1024 * 1024 * 1024

一個topic的一個partition對應的所有segment文件稱爲log。這個設置控制着一個segment文件的最大的大小,如果超過了此大小,就會生成一個新的segment文件。此配置可以被覆蓋,參考the per-topic configuration section。

 

log.roll.hours 默認值:24 * 7

這個設置會強制Kafka去roll一個新的log segment文件,即使當前使用的segment文件的大小還沒有超過log.segment.bytes。此配置可以被覆蓋,參考the per-topic configuration section。

 

log.cleanup.policy 默認值:delete

此配置可以設置成delete或compact。如果設置爲delete,當log segment文件的大小達到上限,或者roll時間達到上限,文件將會被刪除。如果設置成compact,則此文件會被清理,標記成已過時狀態,詳見log compaction。此配置可以被覆蓋,參考the per-topic configuration section。

 

log.retention.minutes 默認值:7 days

在刪除log文件之前,保存在磁盤的時間,單位爲分鐘,這是所有topic的默認值。注意如果同時設置了log.retention.minutes和log.retention.bytes,如果達到任意一個條件的限制,都會馬上刪掉。此配置可以被覆蓋,參考the per-topic configuration section。

 

log.retention.bytes 默認值:-1

topic每個分區的最大文件大小,一個topic的大小限制 = 分區數 * log.retention.bytes。-1沒有大小限log.retention.bytes和log.retention.minutes任意一個達到要求,都會執行刪除。此配置可以被覆蓋,參考the per-topic configuration section。

 

log.retention.check.interval.ms 默認值:5 minutes

檢查任意一個log segment文件是否需要進行retention處理的時間間隔。

 

log.cleaner.enable 默認值:false

設置爲true就開啓了log compaction功能。

 

log.cleaner.threads 默認值:1

使用log compaction功能來清理log的線程的數量。

 

log.cleaner.io.max.bytes.per.second 默認值:None

在執行log compaction的過程中,限制了cleaner每秒鐘I/O的數據量,以免cleaner影響正在執行的請求。

 

log.cleaner.dedupe.buffer.size 默認值:500 * 1024 * 1024

日誌壓縮去重時候的緩存空間,在空間允許的情況下,越大越好。

 

log.cleaner.io.buffer.size 默認值:512 * 1024

日誌清理時候用到的I/O塊(chunk)大小,一般不需要修改。

 

log.cleaner.io.buffer.load.factor 默認值:0.9

日誌清理中hash表的擴大因子,一般不需要修改。

 

log.cleaner.backoff.ms 默認值:15000

檢查log是否需要clean的時間間隔。

 

log.cleaner.min.cleanable.ratio 默認值:0.5

控制了log compactor進行clean操作的頻率。默認情況下,當log的50%以上已被clean時,就不用繼續clean了。此配置可以被覆蓋,參考the per-topic configuration section。

 

log.cleaner.delete.retention.ms 默認值:1 day

對於壓縮的日誌保留的最長時間,也是客戶端消費消息的最長時間,同log.retention.minutes的區別在於一個控制未壓縮數據,一個控制壓縮後的數據,參考the per-topic configuration section。

 

log.index.size.max.bytes 默認值:10 * 1024 * 1024

每一個log segment文件的offset index文件的最大的size。注意總是預分配一個稀疏(sparse)文件,當roll這個文件時再shrink down。如果index文件被寫滿,那麼就roll一個新的log segment文件,即使還沒達到log.segment.byte限制。參考the per-topic configuration section。

 

log.index.interval.bytes 默認值:4096

當執行一個fetch操作後,需要一定的空間來掃描最近的offset大小,設置越大,代表掃描速度越快,但是也更耗內存,一般情況下不需要改變這個參數。

 

log.flush.interval.messages 默認值:None

在強制fsync一個partition的log文件之前暫存的消息數量。調低這個值會更頻繁的sync數據到磁盤,影響性能。通常建議人家使用replication來確保持久性,而不是依靠單機上的fsync,但是這可以帶來更多的可靠性。

 

log.flush.scheduler.interval.ms 默認值:3000

log flusher檢查是否需要把log刷到磁盤的時間間隔,單位爲ms。

 

log.flush.interval.ms 默認值:None

2次fsync調用之間最大的時間間隔,單位爲ms。即使log.flush.interval.messages沒有達到,只要這個時間到了也需要調用fsync。

 

log.delete.delay.ms 默認值:60000

在log文件被移出索引後,log文件的保留時間。在這段時間內運行的任意正在進行的讀操作完成操作,不用去打斷它。通常不需要改變。

 

log.flush.offset.checkpoint.interval.ms 默認值:60000

記錄上次把log刷到磁盤的時間點的頻率,用來日後的recovery。通常不需要改變。

 

auto.create.topics.enable 默認值:true

是否允許自動創建topic。如果設爲true,那麼produce,consume或者fetch metadata一個不存在的topic時,就會自動創建一個默認replication factor和partition number的topic。

 

controller.socket.timeout.ms 默認值:30000

partition管理控制器發向replica的命令的socket超時時間。

 

controller.message.queue.size 默認值:10

partition leader與replicas數據同步時的消息的隊列大小。

 

default.replication.factor 默認值:1

自動創建topic時的默認replication factor的個數。

 

replica.lag.time.max.ms 默認值:10000

如果一個follower在有一個時間窗口內沒有發送任意fetch請求,leader就會把這個follower從ISR(in-sync replicas)移除,並認爲它已掛掉。

 

replica.lag.max.messages 默認值:4000

如果一個replica落後leader此配置指定的消息條數,leader就會把它移除ISR,並認爲它掛掉。

 

replica.socket.timeout.ms 默認值:300 * 1000

複製數據過程中,replica發送給leader的網絡請求的socket超時時間。

 

replica.socket.receive.buffer.bytes 默認值:64 * 1024

複製數據過程中,replica發送網絡請求給leader的socket receiver buffer的大小。

 

replica.fetch.max.bytes 默認值:1024 * 1024

複製數據過程中,replica發送給leader的fetch請求試圖獲取數據的最大的字節數。

 

replica.fetch.wait.max.ms 默認值:500

複製數據過程中,爲了fetch數據,replica發送請求給leader的最大的等待時間。

 

replica.fetch.min.bytes 默認值:1

複製數據過程中,replica收到的每個fetch響應,期望的最小的字節數,如果沒有收到足夠的字節數,就會等待期望更多的數據,直到達到replica.fetch.wait.max.ms。

 

num.replica.fetchers 默認值:1

用來從leader複製消息的線程數量,增大這個值可以增加follow的I/O並行度。

 

replica.high.watermark.checkpoint.interval.ms 默認值:5000

每一個replica存儲自己的high watermark到磁盤的頻率,用來日後的recovery。

 

fetch.purgatory.purge.interval.requests 默認值:10000

含義暫不明,日後研究。The purge interval (in number of requests) of the fetch request purgatory.

 

producer.purgatory.purge.interval.requests 默認值:10000

含義暫不明,日後研究。The purge interval (in number of requests) of the producer request purgatory.

 

zookeeper.session.timeout.ms 默認值:6000

ZooKeeper的session的超時時間,如果在這段時間內沒有收到ZK的心跳,則會被認爲該Kafka server掛掉了。如果把這個值設置得過低可能被誤認爲掛掉,如果設置得過高,如果真的掛了,則需要很長時間才能被server得知。

 

zookeeper.connection.timeout.ms 默認值:6000

client連接到ZK server的超時時間。

 

zookeeper.sync.time.ms 默認值:2000

一個ZK follower能落後leader多久。

 

controlled.shutdown.enable 默認值:false

如果爲true,在關閉一個broker前,會把當前broker上的所有partition,如果有爲leader的話,會把leader權交給其他broker上的相應的partition。這會降低在關閉期間不可用的時間窗口。

 

controlled.shutdown.max.retries 默認值:3

在執行一個unclean(強行關閉?)的關閉操作前,爲了成功完成關閉操作,最大的重試次數。

 

controlled.shutdown.retry.backoff.ms 默認值:5000

在關閉重試期間的回退(backoff)時間。

 

auto.leader.rebalance.enable 默認值:false

如果設爲true,複製控制器會週期性的自動嘗試,爲所有的broker的每個partition平衡leadership,爲更優先(preferred)的replica分配leadership。

 

leader.imbalance.per.broker.percentage 默認值:10

每個broker允許的不平衡的leader的百分比。如果每個broker超過了這個百分比,複製控制器會重新平衡leadership。

 

leader.imbalance.check.interval.seconds 默認值:300

檢測leader不平衡的時間間隔。

 

offset.metadata.max.bytes 默認值:1024

允許client(消費者)保存它們元數據(offset)的最大的數據量。

 

更多細節請查閱kafka.server.KafkaConfig類。

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