kafka 0.11中文文檔翻譯--第三章:配置( Broker Configs)

3.1 Broker Configs

基本配置如下:
?? 1. broker.id
?? 2. log.dirs
?? 3. zookeeper.connect

下面將更詳細地討論主題級別的配置和默認設置。

名稱 描述 類型 默認 重要性
zookeeper.connect Zookeeper 主機地址 string high
advertised.host.name DEPRECATED:僅在未設置“advertised.listeners”或“l(fā)isteners”時使用。用advertised.listeners替換。 主機名發(fā)布到ZooKeeper供客戶使用,會分發(fā)給所有的producer,consumer和其他broker來連接自己。。 在IaaS環(huán)境中,這可能需要與代理綁定的接口不同。 如果未設置,則將使用“host.name”的值(如果已配置)。 否則,它將使用從java.net.InetAddress.getCanonicalHostName()返回的值。 string null high
advertised.listeners 監(jiān)聽器發(fā)布到ZooKeeper供客戶使用,如果與上面的監(jiān)聽器不同。 在IaaS環(huán)境中,這可能需要與代理綁定的接口不同。 如果沒有設置,將使用listeners的值。 string null high
advertised.port DEPRECATED:僅在未設置“advertised.listeners”或“l(fā)isteners”時使用。 改用advertised.listeners替代。 發(fā)布到ZooKeeper供客戶端使用的端口。 在IaaS環(huán)境中,這可能需要與代理綁定的端口不同。 如果沒有設置,它將使用broker綁定的相同端口。 int null high
auto.create.topics.enable 是否允許自動創(chuàng)建topic。如果設為true,那么produce,consume或者fetch metadata一個不存在的topic時,就會自動創(chuàng)建一個默認replication factor和partition number的topic。 boolean true high
auto.leader.rebalance.enable 如果設為true,復制控制器會周期性的自動嘗試,為所有的broker的每個partition平衡leadership,為更優(yōu)先(preferred)的replica分配leadership。 boolean true high
background.threads 一些后臺任務處理的線程數,例如過期消息文件的刪除等,一般情況下不需要去做修改 int 10 high
broker.id 每一個broker在集群中的唯一表示,要求是正數。當該服務器的IP地址發(fā)生改變時,broker.id沒有變化,則不會影響consumers的消息情況。如果未設置,則會生成唯一的代理標識。為避免zookeeper生成的代理標識與用戶配置的代理標識之間的沖突,生成的代理標識從reserved.broker.max.id + 1開始。 int -1 high
compression.type 為主題指定一個壓縮類型,此配置接受標準壓縮編碼('gzip', 'snappy', lz4),另外接受'uncompressed‘相當于不壓縮, 'producer' 意味著壓縮類型由producer指定。 string producer high
delete.topic.enable 啟用刪除主題。 如果此配置已關閉,則通過管理工具刪除主題將不起作用。刪除topic是影響注冊在/admin/delete_topics的監(jiān)聽 boolean false high
host.name DEPRECATED:僅在未設置“l(fā)isteners”時使用。 使用listeners來代替。 broker的主機名。 如果這個設置,它只會綁定到這個地址。 如果沒有設置,它將綁定到所有interface。并將其中之一發(fā)送到ZK,但是發(fā)送到zk的不一定是正確的地址,導致消費端消費不到消息,所以這里必須要設置 String "" High
leader.imbalance.check.interval.seconds 分區(qū)rebalance檢查的頻率,由控制器觸發(fā) long 300 high
leader.imbalance.per.broker.percentage 每個broker允許的不平衡的leader的百分比。如果每個broker超過了這個百分比,復制控制器會對分區(qū)進行重新的平衡。該值以百分比形式指定。 int 10 high
listeners 監(jiān)聽器列表 - 逗號分隔的我們將監(jiān)聽的URI列表和監(jiān)聽器名稱。 如果偵聽器名稱不是安全協(xié)議,則還必須設置listener.security.protocol.map。 指定主機名為0.0.0.0以綁定到所有接口。 保留主機名為空以綁定到默認接口。 合法偵聽器列表的示例:PLAINTEXT:// myhost:9092,SSL://:9091 CLIENT://0.0.0.0:9092,REPLICATION:// localhost:9093 string null high
log.dir 保存日志數據的目錄(對log.dirs屬性的補充) string /tmp/kafka-logs high
log.dirs 一個用逗號分隔的目錄列表,可以有多個,用來為Kafka存儲數據。每當需要為一個新的分區(qū)分配一個目錄時,會選擇當前的存儲分區(qū)最少的目錄來存儲。如果沒有配置,則使用log.dir配置的值。 string null high
log.flush.interval.messages 在將消息刷新到磁盤之前,在日志分區(qū)上累積的消息數量。強制fsync一個分區(qū)的log文件之前暫存的消息數量。因為磁盤IO操作是一個慢操作,但又是一個“數據可靠性”的必要手段,所以檢查是否需要固化到硬盤的時間間隔。需要在“數據可靠性”與“性能”之間做必要的權衡,如果此值過大,將會導致每次“fsync”的時間過長(IO阻塞),如果此值過小,將會導致”fsync“的次數較多,這也就意味著整體的client請求有一定的延遲,物理server故障,將會導致沒有fsync的消息丟失。通常建議使用replication來確保持久性,而不是依靠單機上的fsync long 9223372036854775807 high
log.flush.interval.ms 任何主題中的消息在刷新到磁盤之前都保留在內存中的最長時間(以毫秒為單位)。 如果未設置,則使用log.flush.scheduler.interval.ms中的值 long null high
log.flush.scheduler.interval.ms 日志刷新器檢查是否需要將任何日志刷新到磁盤的頻率(以毫秒為單位)檢查是否需要fsync的時間間隔 long 9223372036854775807 high
log.flush.offset.checkpoint.interval.ms 記錄上次把日志刷到磁盤的時間點的頻率,用來日后的恢復。通常不需要改變。 int 60000 high
log.flush.start.offset.checkpoint.interval.ms 我們更新記錄起始偏移量的持續(xù)記錄的頻率 int 60000 high
log.retention.bytes 日志達到刪除大小的閾值。每個topic下每個分區(qū)保存數據的最大文件大??;注意,這是每個分區(qū)的上限,因此這個數值乘以分區(qū)的個數就是每個topic保存的數據總量。同時注意:如果log.retention.hours和log.retention.bytes都設置了,則超過了任何一個限制都會造成刪除一個段文件。注意,這項設置可以由每個topic設置時進行覆蓋。-1為不限制。 long -1 high
log.retention.hours 每個日志文件刪除之前保存的時間,單位小時。默認數據保存時間對所有topic都一樣。log.retention.minutes 和 log.retention.bytes 都是用來設置刪除日志文件的,如果達到任意一個條件的限制,都會進行刪除。這個屬性設置可以在topic基本設置時進行覆蓋。 int 168 high
log.retention.minutes 在刪除日志文件之前保留日志的分鐘數(以分鐘為單位),次要log.retention.ms屬性。 如果未設置,則使用log.retention.hours中的值 int null high
log.retention.ms 保留日志文件的毫秒數(以毫秒為單位),如果未設置,則使用log.retention.minutes中的值 long null high
log.roll.hours 這個設置會強制Kafka去新建一個新的log segment文件,即使當前使用的segment文件的大小還沒有超過log.segment.bytes。此配置可以被覆蓋 int 168 high
log.roll.jitter.hours 從logRollTimeMillis減去的最大抖動(以小時為單位),次要log.roll.jitter.ms屬性 int 0 high
log.roll.jitter.ms 同上,如果沒有設置則使用log.roll.jitter.hours long null high
log.roll.ms 同log.roll.hours,單位ms long null high
log.segment.bytes topic 分區(qū)的日志存放在某個目錄下諸多文件中,這些文件將partition的日志切分成一段一段的,這就是段文件(segment file);一個topic的一個分區(qū)對應的所有segment文件稱為log。這個設置控制著一個segment文件的最大的大小,如果超過了此大小,就會生成一個新的segment文件。此配置可以被覆蓋。 int 1073741824 high
log.segment.delete.delay.ms 在log文件被移出索引后(刪除),log文件的保留時間。在這段時間內運行的任意正在進行的讀操作完成操作,不用去打斷它。通常不需要改變。 long 60000 high
message.max.bytes kafka允許的最大的一個批次的消息大小。 如果這個數字增加,并且有0.10.2版本以下的消費者,那么消費者的提取大小也必須增加,以便他們可以取得這么大的記錄批次。在最新的消息格式版本中,記錄總是被組合到一個批次以提高效率。 在以前的消息格式版本中,未壓縮的記錄不會分組到批次中,并且此限制僅適用于該情況下的單個記錄。可以使用主題級別max.message.bytes來設置每個主題。 int 1000012 high
min.insync.replicas 當生產者將ack設置為“全部”(或“-1”)時,min.insync.replicas指定必須確認寫入被認為成功的最小副本數(必須確認每一個repica的寫數據都是成功的)。 如果這個最小值不能滿足,那么生產者將會引發(fā)一個異常(NotEnoughReplicas或NotEnoughReplicasAfterAppend)。當一起使用時,min.insync.replicas和acks允許您強制更大的耐久性保證。 一個典型的情況是創(chuàng)建一個復制因子為3的主題,將min.insync.replicas設置為2,并且生產者使用“all”選項。 這將確保如果大多數副本沒有寫入生產者則拋出異常。 int 1 high
num.io.threads server端處理請求時的I/O線程的數量,不要小于磁盤的數量。 int 8 high
num.network.threads 服務器用于接收來自網絡的請求并向網絡發(fā)送響應的線程數 int 3 high
num.recovery.threads.per.data.dir 每個數據目錄的線程數,用于啟動時的日志恢復和關閉時的刷新 int 1 high
num.replica.fetchers 用來從leader復制消息的線程數量,增大這個值可以增加follow的I/O并行度。 int 1 high
offset.metadata.max.bytes 允許client(消費者)保存它們元數據(offset)的最大的數據量。 int 4096 high
offsets.commit.required.acks 在offset commit可以接受之前,需要設置acks的數目,一般不需要更改 short -1 high
offsets.commit.timeout.ms offsets提交將被延遲,直到偏移量topic的所有副本都收到提交或達到此超時。 這與生產者請求超時類似。 int 5000 high
offsets.load.buffer.size 每次從offset段文件往緩存加載offsets數據時的讀取的數據大小。 int 5242880 high
offsets.retention.check.interval.ms 檢查失效offset的頻率 long 600000 high
offsets.retention.minutes 如果一個group在這個時間沒沒有提交offsets,則會清理這個group的offset數據 int 1440 high
offsets.topic.compression.codec 用于offsets主題的壓縮編解碼器 - 壓縮可用于實現“原子”提交 int 0 high
offsets.topic.num.partitions Offsets topic的分區(qū)數量(部署后不應更改) int 50 high
offsets.topic.replication.factor Offsets topic的復制因子(設置得更高以確??捎眯裕?內部主題創(chuàng)建將失敗,直到群集大小滿足此復制因素要求。 short 3 high
offsets.topic.segment.bytes 為了便于更快的日志壓縮和緩存加載,偏移量的主題段字節(jié)應保持相對較小 int 104857600 high
port DEPRECATED:僅在未設置“l(fā)isteners”時使用。 使用listeners來代替。 這個端口來監(jiān)聽和接受連接 int 9092 high
queued.max.requests I/O線程等待隊列中的最大的請求數,超過這個數量,network線程就不會再接收一個新的請求。這個參數是指定用于緩存網絡請求的隊列的最大容量,這個隊列達到上限之后將不再接收新請求。一般不會成為瓶頸點,除非I/O性能太差,這時需要配合num.io.threads等配置一同進行調整。 int 500 high
quota.consumer.default DEPRECATED:只有在動態(tài)默認配額沒有配置或者為Zookeeper時才使用。 如果一個消費者每秒消費的數據量大于此值,則暫時不會再允許消費。0.9版本新加。 long 9223372036854775807 high
quota.producer.default DEPRECATED:只有在動態(tài)默認配額沒有配置或者為Zookeeper時才使用。如果一個生產者每秒產生的數據大于此值,則暫時會推遲接受生產者數據。 long 9223372036854775807 high
replica.fetch.min.bytes 復制數據過程中,replica收到的每個fetch響應,期望的最小的字節(jié)數,如果沒有收到足夠的字節(jié)數,就會等待期望更多的數據,直到達到replica.fetch.wait.max.ms。 int 1 high
replica.fetch.wait.max.ms Replicas follow同leader之間通信的最大等待時間,失敗了會重試。 此值始終應始終小于replica.lag.time.max.ms,以防止針對低吞吐量主題頻繁收縮ISR int 500 high
replica.lag.time.max.ms 如果一個follower在這個時間內沒有發(fā)送fetch請求,leader將從ISR重移除這個follower,并認為這個follower已經掛了 long 10000 high
replica.high.watermark.checkpoint.interval.ms 每一個replica follower存儲自己的high watermark到磁盤的頻率,用來日后的recovery。 long 5000 high
replica.socket.receive.buffer.bytes 復制數據過程中,follower發(fā)送網絡請求給leader的socket receiver buffer的大小。 int 65536 high
replica.socket.timeout.ms 復制數據過程中,replica發(fā)送給leader的網絡請求的socket超時時間。它的值應該至少是replica.fetch.wait.max.ms int 30000 high
request.timeout.ms 在向producer發(fā)送ack之前,broker允許等待的最大時間,如果超時,broker將會向producer發(fā)送一個error ACK.意味著上一次消息因為某種原因未能成功(比如follower未能同步成功) ,客戶端將在必要時重新發(fā)送請求,或者如果重試耗盡,則請求失敗。 int 30000 high
socket.receive.buffer.bytes server端用來處理socket連接的SO_RCVBUFF緩沖大小。如果值為-1,則將使用操作系統(tǒng)默認值。 int 102400 high
socket.request.max.bytes server能接受的請求的最大的大小,這是為了防止server跑光內存,不能大于Java堆的大小。 int 104857600 high
socket.send.buffer.bytes server端用來處理socket連接的SO_SNDBUFF緩沖大小。如果值為-1,則將使用操作系統(tǒng)默認值。 int 102400 high
transaction.max.timeout.ms 事務的最大允許超時時間。 如果客戶請求的事務時間超過這個時間,那么broker將在InitProducerIdRequest中返回一個錯誤。 這樣可以防止客戶超時時間過長,從而阻礙消費者讀取事務中包含的主題。 int 900000 high
transaction.state.log.load.buffer.size 將生產者ID和事務加載到緩存中時,從事務日志段(the transaction log segments)讀取的批量大小。 int 5242880 high
transaction.state.log.min.isr 覆蓋事務主題的min.insync.replicas配置。 int 2 high
transaction.state.log.num.partitions 事務主題的分區(qū)數量(部署后不應更改)。 int 50 high
transaction.state.log.replication.factor 事務主題的復制因子(設置更高以確??捎眯裕?。 內部主題創(chuàng)建將失敗,直到群集大小滿足此復制因素要求。 short 3 high
transaction.state.log.segment.bytes 事務主題段字節(jié)應保持相對較小,以便于更快的日志壓縮和緩存負載 int 104857600 high
transactional.id.expiration.ms 事務協(xié)調器在未收到任何事務狀態(tài)更新之前,主動設置生產者的事務標識為過期之前將等待的最長時間(以毫秒為單位)。 int 604800000 high
unclean.leader.election.enable 指明了是否能夠使不在ISR中replicas follower設置用來作為leader boolean false high
zookeeper.connection.timeout.ms 連接到ZK server的超時時間,沒有配置就使用zookeeper.session.timeout.ms int null high
zookeeper.session.timeout.ms ZooKeeper的session的超時時間,如果在這段時間內沒有收到ZK的心跳,則會被認為該Kafka server掛掉了。如果把這個值設置得過低可能被誤認為掛掉,如果設置得過高,如果真的掛了,則需要很長時間才能被server得知。 int 6000 high
zookeeper.set.acl 連接zookeeper是否使用 ACLs安全驗證 boolean false high
broker.id.generation.enable 服務器是否允許自動生成broker.id;如果允許則產生的值會交由reserved.broker.max.id審核 boolean true medium
broker.rack broker的機架位置。 這將在機架感知復制分配中用于容錯。 例如:RACK1,us-east-1d string null medium
connections.max.idle.ms 空閑連接超時:服務器套接字處理器線程關閉閑置超過此的連接 long 600000 medium
controlled.shutdown.enable 是否允許控制器關閉broker ,若是設置為true,會關閉在這個broker上所有分區(qū)的leader,并轉移到其他broker,這會降低在關閉期間不可用的時間。 boolean true medium
controlled.shutdown.max.retries 控制器在關閉時可能有多種原因導致失敗,可以重新關閉的次數。 int 3 medium
controlled.shutdown.retry.backoff.ms 在每次重新關閉前,系統(tǒng)需要一定的時間去恢復發(fā)生錯誤之前的狀態(tài),這個就是在重試期間的回退(backoff)時間。 long 5000 medium
controller.socket.timeout.ms 控制器到broker通道的socket超時時間 int 30000 medium
default.replication.factor 自動創(chuàng)建topic時的默認副本的個數 int 1 medium
delete.records.purgatory.purge.interval.requests 詳見注解 int 1 medium
fetch.purgatory.purge.interval.requests 提取清除請求的清除間隔(請求數)詳見注解 int 1000 medium
producer.purgatory.purge.interval.requests The purge interval (in number of requests) of the producer request purgatory詳見注解 int 1000 medium
group.initial.rebalance.delay.ms 在執(zhí)行第一次再平衡之前,group協(xié)調員將等待更多消費者加入group的時間。 延遲時間越長意味著重新平衡的可能性越小,但是等待處理開始的時間增加。 int 3000 medium
group.max.session.timeout.ms 消費者向組內注冊時允許的最大超時時間,超過這個時間表示注冊失敗。更長的超時使消費者有更多的時間來處理心跳之間的消息,代價是檢測失敗的時間更長。 int 300000 medium
group.min.session.timeout.ms 消費者向組內注冊時允許的最小超時時間,更短的超時以更頻繁的消費者心跳為代價但有更快速的故障檢測,這可能影響broker資源。 int 6000 medium
inter.broker.listener.name 用于經紀人之間溝通的監(jiān)聽者名稱。如果未設置,則偵聽器名稱由security.inter.broker.protocol定義。 同時設置此和security.inter.broker.protocol屬性是錯誤的。 string null medium
inter.broker.protocol.version 指定將使用哪個版本的 inter-broker 協(xié)議。 在所有經紀人升級到新版本之后,這通常會受到沖擊。升級時要設置 string 0.11.0-IV2 medium
log.cleaner.backoff.ms 檢查log是否需要clean的時間間隔。 long 15000 medium
log.cleaner.dedupe.buffer.size 日志壓縮去重時候的緩存空間,在空間允許的情況下,越大越好。 long 134217728 medium
log.cleaner.delete.retention.ms 對于壓縮的日志保留的最長時間,也是客戶端消費消息的最長時間,同log.retention.minutes的區(qū)別在于一個控制未壓縮數據,一個控制壓縮后的數據。 long 86400000 medium
log.cleaner.enable 啟用日志清理器進程在服務器上運行。使用了cleanup.policy = compact的主題,包括內部offsets主題,都應該啟動該選項。如果被禁用的話,這些話題將不會被壓縮,并且會不斷增長。 boolean true medium
log.cleaner.io.buffer.load.factor 日志清理中hash表的擴大因子,一般不需要修改。 double 0.9 medium
log.cleaner.io.buffer.size 日志清理時候用到的I/O塊(chunk)大小,一般不需要修改。 int 524288 medium
log.cleaner.io.max.bytes.per.second 在執(zhí)行l(wèi)og compaction的過程中,限制了cleaner每秒鐘I/O的數據量,以免cleaner影響正在執(zhí)行的請求。 double 1. medium
log.cleaner.min.cleanable.ratio 控制了log compactor進行clean操作的頻率。默認情況下,當log的50%以上已被clean時,就不用繼續(xù)clean了。此配置可以被覆蓋。 double 0.5 medium
log.cleaner.min.compaction.lag.ms 消息在日志中保持未壓縮的最短時間。 僅適用于正在壓縮的日志。 long 0 medium
log.cleaner.threads 用于日志清理的后臺線程的數量 int 1 medium
log.cleanup.policy 此配置可以設置成delete或compact。如果設置為delete,當log segment文件的大小達到上限,或者roll時間達到上限,文件將會被刪除。如果設置成compact,則此文件會被清理,標記成已過時狀態(tài),詳見 4.8 。此配置可以被覆蓋。 list delete medium
log.index.interval.bytes 當執(zhí)行一個fetch操作后,需要一定的空間來掃描最近的offset大小,設置越大,代表掃描速度越快,但是也更耗內存,一般情況下不需要改變這個參數。 int 4096 medium
log.index.size.max.bytes 每個log segment的最大尺寸。注意,如果log尺寸達到這個數值,即使尺寸沒有超過log.segment.bytes限制,也需要產生新的log segment。 int 10485760 medium
log.message.format.version 指定broker將用于將消息添加到日志文件的消息格式版本。 該值應該是有效的ApiVersion。 一些例子是:0.8.2,0.9.0.0,0.10.0。 通過設置特定的消息格式版本,用戶保證磁盤上的所有現有消息都小于或等于指定的版本。 不正確地設置這個值將導致使用舊版本的用戶出錯,因為他們將接收到他們不理解的格式的消息。 string 0.11.0-IV2 medium
log.message.timestamp.difference.max.ms broker收到消息時的時間戳和消息中指定的時間戳之間允許的最大差異。 如果log.message.timestamp.type = CreateTime,如果時間戳的差值超過此閾值,則會拒絕接受這條消息。 如果log.message.timestamp.type = LogAppendTime,則忽略此配置。允許的最大時間戳差異不應大于log.retention.ms,以避免不必要地頻繁進行日志滾動。 long 9223372036854775807 medium
log.message.timestamp.type 定義消息中的時間戳是消息創(chuàng)建時間還是日志追加時間。 該值應該是“CreateTime”或“LogAppendTime” string CreateTime medium
log.preallocate 是否預創(chuàng)建新的段文件,windows推薦使用 boolean false medium
log.retention.check.interval.ms 檢查日志段文件的間隔時間,以確定是否文件屬性是否到達刪除要求。 long 300000 medium
max.connections.per.ip broker上每個IP允許最大的連接數 int 2147483647 medium
max.connections.per.ip.overrides 每個ip或者hostname默認的連接的最大覆蓋 String "" medium
num.partitions 新建Topic時默認的分區(qū)數 int 1 medium
principal.builder.class The fully qualified name of a class that implements the PrincipalBuilder interface, which is currently used to build the Principal for connections with the SSL SecurityProtocol. class org.apache.
kafka.common.
security.auth.
DefaultPrincipalBuilder
medium
replica.fetch.backoff.ms 復制數據時失敗等待時間 int 1000 medium
replica.fetch.max.bytes 為每個分區(qū)設置獲取的消息的字節(jié)數。 這不是絕對最大值,如果第一個非空分區(qū)中的第一個record batch大于此值,那么record batch仍將被返回以確保可以進行。 代理接受的最大記錄批量大小通過message.max.bytes(broker config)或max.message.bytes(topic config)進行定義。 int 1048576 medium
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容