一、Kafka中topic級別配置
1、Topic級別配置
配置topic級別參數時,相同(參數)屬性topic級別會覆蓋全局的,否則默認為全局配置屬性值。
創建topic參數可以設置一個或多個--config "Property(屬性)",下面是創建一個topic名稱為"my-topic"例子,它設置了2個參數max message size 和 flush rate.
(A)創建topic時配置參數
bin/kafka-topics.sh --zookeeper 192.168.2.225:2183/config/mobile/mq/mafka02 --create --topic my-topic --partitions 1 --replication-factor 1
--config max.message.bytes=64000 --config flush.messages=1
(B)修改topic時配置參數
覆蓋已經有topic參數,下面例子修改"my-topic"的max message屬性
bin/kafka-topics.sh --zookeeper192.168.2.225:2183/config/mobile/mq/mafka02 --alter --topic my-topic --config max.message.bytes=128000
(C)刪除topic級別配置參數
bin/kafka-topics.sh --zookeeper192.168.2.225:2183/config/mobile/mq/mafka02 --alter --topic my-topic --delete-config max.message.bytes
注:配置的kafka集群的根目錄為/config/mobile/mq/mafka02,因此所有節點信息都在此目錄下。
二、Topic級別配置屬性表
Property(屬性) |
Default(默認值) |
Server Default Property(server.properties) |
說明(解釋) |
cleanup.policy |
delete |
log.cleanup.policy |
日志清理策略選擇有:delete和compact主要針對過期數據的處理,或是日志文件達到限制的額度,會被 topic創建時的指定參數覆蓋 |
delete.retention.ms |
86400000 (24 hours) |
log.cleaner.delete.retention.ms |
對於壓縮的日志保留的最長時間,也是客戶端消費消息的最長時間,同log.retention.minutes的區別在於一個控制未壓縮數據,一個控制壓縮后的數據。會被topic創建時的指定參數覆蓋 |
flush.messages |
None |
log.flush.interval.messages |
log文件”sync”到磁盤之前累積的消息條數,因為磁盤IO操作是一個慢操作,但又是一個”數據可靠性"的必要手段,所以此參數的設置,需要在"數據可靠性"與"性能"之間做必要的權衡.如果此值過大,將會導致每次"fsync"的時間較長(IO阻塞),如果此值過小,將會導致"fsync"的次數較多,這也意味着整體的client請求有一定的延遲.物理server故障,將會導致沒有fsync的消息丟失. |
flush.ms |
None |
log.flush.interval.ms |
僅僅通過interval來控制消息的磁盤寫入時機,是不足的.此參數用於控制"fsync"的時間間隔,如果消息量始終沒有達到閥值,但是離上一次磁盤同步的時間間隔達到閥值,也將觸發. |
index.interval.bytes |
4096 |
log.index.interval.bytes |
當執行一個fetch操作后,需要一定的空間來掃描最近的offset大小,設置越大,代表掃描速度越快,但是也更好內存,一般情況下不需要搭理這個參數 |
message.max.bytes |
1,000,000 |
message.max.bytes |
表示消息的最大大小,單位是字節 |
min.cleanable.dirty.ratio |
0.5 |
log.cleaner.min.cleanable.ratio |
日志清理的頻率控制,越大意味着更高效的清理,同時會存在一些空間上的浪費,會被topic創建時的指定參數覆蓋 |
retention.bytes |
None |
log.retention.bytes |
topic每個分區的最大文件大小,一個topic的大小限制 = 分區數*log.retention.bytes。-1沒有大小限log.retention.bytes和log.retention.minutes任意一個達到要求,都會執行刪除,會被topic創建時的指定參數覆蓋 |
retention.ms |
None |
log.retention.minutes |
數據存儲的最大時間超過這個時間會根據log.cleanup.policy設置的策略處理數據,也就是消費端能夠多久去消費數據 log.retention.bytes和log.retention.minutes達到要求,都會執行刪除,會被topic創建時的指定參數覆蓋 |
segment.bytes |
1 GB |
log.segment.bytes |
topic的分區是以一堆segment文件存儲的,這個控制每個segment的大小,會被topic創建時的指定參數覆蓋 |
segment.index.bytes |
10 MB |
log.index.size.max.bytes |
對於segment日志的索引文件大小限制,會被topic創建時的指定參數覆蓋 |
log.roll.hours |
7 days |
log.roll.hours |
這個參數會在日志segment沒有達到log.segment.bytes設置的大小,也會強制新建一個segment會被 topic創建時的指定參數覆蓋 |