# Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # see kafka.server.KafkaConfig for additional details and defaults ############################# Server Basics ############################# #每一個broker在集群中的唯一表示,要求是正數。當該服務器的IP地址發生改變時,broker.id沒有變化,則不會影響consumers的消息情況 broker.id=106 #這就是說,這條命令其實並不執行刪除動作,僅僅是在zookeeper上標記該topic要被刪除而已,同時也提醒用戶一定要提前打開delete.topic.enable開關,否則刪除動作是不會執行的。 delete.topic.enable=true #是否允許自動創建topic,若是false,就需要通過命令創建topic auto.create.topics.enable=false ############################# Socket Server Settings ############################# # The address the socket server listens on. It will get the value returned from # java.net.InetAddress.getCanonicalHostName() if not configured. # FORMAT: # listeners = listener_name://host_name:port # EXAMPLE: # listeners = PLAINTEXT://your.host.name:9092 #Socket服務器偵聽的地址。如果沒有配置,它將獲得從Java.NET.InAddio.GETCANONICALITHAMEMENE()返回的值 listeners=PLAINTEXT://node106.yinzhengjie.org.cn:9092 #broker server服務端口 port=9092 #broker的主機地址,若是設置了,那么會綁定到這個地址上,若是沒有,會綁定到所有的接口上,並將其中之一發送到ZK,一般不設置 host.name=node106.yinzhengjie.org.cn # Hostname and port the broker will advertise to producers and consumers. If not set, # it uses the value for "listeners" if configured. Otherwise, it will use the value # returned from java.net.InetAddress.getCanonicalHostName(). #kafka 0.9.x以后的版本新增了advertised.listeners配置,kafka 0.9.x以后的版本不要使用 advertised.host.name 和 advertised.host.port 已經deprecated.如果配置的話,它使用 "listeners" 的值。否則,它將使用從java.net.InetAddress.getCanonicalHostName()返回的值。 #advertised.listeners=PLAINTEXT://your.host.name:9092 #將偵聽器(listener)名稱映射到安全協議,默認情況下它們是相同的。有關詳細信息,請參閱配置文檔。 #listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL #處理網絡請求的最大線程數 num.network.threads=30 #處理磁盤I/O的線程數 num.io.threads=30 #套接字服務器使用的發送緩沖區(SOYSNDBUF) socket.send.buffer.bytes=5242880 #套接字服務器使用的接收緩沖區(SOYRCVBUF) socket.receive.buffer.bytes=5242880 #套接字服務器將接受的請求的最大大小(對OOM的保護) socket.request.max.bytes=104857600 #I/O線程等待隊列中的最大的請求數,超過這個數量,network線程就不會再接收一個新的請求。應該是一種自我保護機制。 queued.max.requests=1000 ############################# Log Basics ############################# #日志存放目錄,多個目錄使用逗號分割,如果你有多塊磁盤,建議配置成多個目錄,從而達到I/O的效率的提升。 log.dirs=/home/data/kafka/logs,/home/data/kafka/logs2,/home/data/kafka/logs3 #每個topic的分區個數,若是在topic創建時候沒有指定的話會被topic創建時的指定參數覆蓋 num.partitions=20 #在啟動時恢復日志和關閉時刷盤日志時每個數據目錄的線程的數量,默認1 num.recovery.threads.per.data.dir=30 # 默認副本數 default.replication.factor=2 #服務器接受單個消息的最大大小,即消息體的最大大小,單位是字節 message.max.bytes=104857600 # 自動負載均衡,如果設為true,復制控制器會周期性的自動嘗試,為所有的broker的每個partition平衡leadership,為更優先(preferred)的replica分配leadership。 # auto.leader.rebalance.enable=false ############################# Log Flush Policy ############################# #在強制fsync一個partition的log文件之前暫存的消息數量。調低這個值會更頻繁的sync數據到磁盤,影響性能。通常建議人家使用replication來確保持久性,而不是依靠單機上的fsync,但是這可以帶來更多的可靠性,默認10000。 #log.flush.interval.messages=10000 #2次fsync調用之間最大的時間間隔,單位為ms。即使log.flush.interval.messages沒有達到,只要這個時間到了也需要調用fsync。默認3000ms. #log.flush.interval.ms=10000 ############################# Log Retention Policy ############################# # 日志保存時間 (hours|minutes),默認為7天(168小時)。超過這個時間會根據policy處理數據。bytes和minutes無論哪個先達到都會觸發。 log.retention.hours=168 #日志數據存儲的最大字節數。超過這個時間會根據policy處理數據。 #log.retention.bytes=1073741824 #控制日志segment文件的大小,超出該大小則追加到一個新的日志segment文件中(-1表示沒有限制) log.segment.bytes=536870912 # 當達到下面時間,會強制新建一個segment #log.roll.hours = 24*7 # 日志片段文件的檢查周期,查看它們是否達到了刪除策略的設置(log.retention.hours或log.retention.bytes) log.retention.check.interval.ms=600000 #是否開啟壓縮 #log.cleaner.enable=false #日志清理策略選擇有:delete和compact主要針對過期數據的處理,或是日志文件達到限制的額度,會被 topic創建時的指定參數覆蓋 #log.cleanup.policy=delete # 日志壓縮運行的線程數 #log.cleaner.threads=2 # 壓縮的日志保留的最長時間 #log.cleaner.delete.retention.ms=3600000 ############################# Zookeeper ############################# #zookeeper集群的地址,可以是多個,多個之間用逗號分割. zookeeper.connect=node106.yinzhengjie.org.cn:2181,node107.yinzhengjie.org.cn:2181,node108.yinzhengjie.org.cn:2181/kafka01 #ZooKeeper的最大超時時間,就是心跳的間隔,若是沒有反映,那么認為已經死了,不易過大 zookeeper.session.timeout.ms=180000 #指定多久消費者更新offset到zookeeper中。注意offset更新時基於time而不是每次獲得的消息。一旦在更新zookeeper發生異常並重啟,將可能拿到已拿到過的消息,連接zk的超時時間 zookeeper.connection.timeout.ms=6000 #請求的最大大小為字節,請求的最大字節數。這也是對最大記錄尺寸的有效覆蓋。注意:server具有自己對消息記錄尺寸的覆蓋,這些尺寸和這個設置不同。此項設置將會限制producer每次批量發送請求的數目,以防發出巨量的請求。 max.request.size=104857600 #每次fetch請求中,針對每次fetch消息的最大字節數。這些字節將會督導用於每個partition的內存中,因此,此設置將會控制consumer所使用的memory大小。這個fetch請求尺寸必須至少和server允許的最大消息尺寸相等,否則,producer可能發送的消息尺寸大於consumer所能消耗的尺寸。 fetch.message.max.bytes=104857600 #ZooKeeper集群中leader和follower之間的同步時間,換句話說:一個ZK follower能落后leader多久。 #zookeeper.sync.time.ms=2000 ############################# Replica Basics ############################# # leader接收follower的"fetch請求"的超時時間,默認是10秒。 # replica.lag.time.max.ms=30000 # 如果relicas落后太多,將會認為此partition relicas已經失效。而一般情況下,因為網絡延遲等原因,總會導致replicas中消息同步滯后。如果消息嚴重滯后,leader將認為此relicas網絡延遲較大或者消息吞吐能力有限。在broker數量較少,或者網絡不足的環境中,建議提高此值.follower落后於leader的最大message數,這個參數是broker全局的。設置太大 了,影響真正“落后”follower的移除;設置的太小了,導致follower的頻繁進出。無法給定一個合適的replica.lag.max.messages的值,因此不推薦使用,據說新版本的Kafka移除了這個參數。 #replica.lag.max.messages=4000 # follower與leader之間的socket超時時間 #replica.socket.timeout.ms=30000 # follower每次fetch數據的最大尺寸 replica.fetch.max.bytes=104857600 # follower的fetch請求超時重發時間 replica.fetch.wait.max.ms=2000 # fetch的最小數據尺寸 #replica.fetch.min.bytes=1 #0.11.0.0版本開始unclean.leader.election.enable參數的默認值由原來的true改為false,可以關閉unclean leader election,也就是不在ISR(IN-Sync Replica)列表中的replica,不會被提升為新的leader partition。kafka集群的持久化力大於可用性,如果ISR中沒有其它的replica,會導致這個partition不能讀寫。 unclean.leader.election.enable=false # follower中開啟的fetcher線程數, 同步速度與系統負載均衡 num.replica.fetchers=5 # partition leader與replicas之間通訊時,socket的超時時間 #controller.socket.timeout.ms=30000 # partition leader與replicas數據同步時,消息的隊列尺寸. #controller.message.queue.size=10 #指定將使用哪個版本的 inter-broker 協議。 在所有經紀人升級到新版本之后,這通常會受到沖擊。升級時要設置 #inter.broker.protocol.version=0.10.1 #指定broker將用於將消息添加到日志文件的消息格式版本。 該值應該是有效的ApiVersion。 一些例子是:0.8.2,0.9.0.0,0.10.0。 通過設置特定的消息格式版本,用戶保證磁盤上的所有現有消息都小於或等於指定的版本。 不正確地設置這個值將導致使用舊版本的用戶出錯,因為他們將接收到他們不理解的格式的消息。 #log.message.format.version=0.10.1