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類。