Kafka在線修改topic日志保存時長(不停機,不重啟)


使用場景:

某些時候,當幾個topic生產者突發產生大量消息時,會造成磁盤空間緊張,這時,除了增加磁盤,另一個方法就是修改配置文件,將日志的保存時間修改小一點,但這兩種方案,都必須停機和重啟kafka,顯然,這在生產集群上,是不能這么處理的。這里,可以通過在線修改單個topic的配置,以覆蓋默認配置,臨時解決磁盤空間緊張的問題。

優點:在線修改,不需要重啟和停機

修改后,新的配置會在 log.retention.check.interval.ms 時間內被檢查並應用到整個集群,該值在 kafka/config/server.properties 中配置,默認為 300 秒
注意,修改前日志保存時長,必然會清除掉超過這個時長的舊數據,在生產環境中,這需要和業務方共同評估和確認

下面以修改名為 my_test_topic 的 topic 為例

#1,查看當前topic配置

./kafka-topics.sh --describe --topic my_test_topic --zookeeper test.myzk.com:2181/kafkacluster

#2,調整topic配置

./kafka-topics.sh --topic my_test_topic --zookeeper test.myzk.com:2181/kafkacluster --alter --config retention.ms=43200000
# 時長毫秒 43200000ms=12h

#3,檢查修改的配置是否生效

同第一步,查看輸出的第一行,類似如下:
Topic:__consumer_offsets PartitionCount:50 ReplicationFactor:3 Configs:segment.bytes=104857600,delete.retention.ms=86400000,retention.ms=43200000,cleanup.policy=delete,compression.type=producer

其他可選的調整參數:

segment.bytes=104857600       #單個日志文件大小,默認1G
delete.retention.ms=86400000 #對於壓縮日志保留的最長時間,也是客戶端消費消息的最長時間,與retention.ms的區別在於一個控制 未壓縮數據,一個控制 壓縮后的數據
retention.ms=86400000            #如果使用“delete”的retention策略,這項配置就是指刪除日志前日志保存的時間
cleanup.policy=delete               #默認方式 delete 將會丟棄舊的部分 compact 將會進行日志壓縮
compression.type=producer     #壓縮類型,此配置接受標准壓縮編碼 gzip, snappy, lz4 ,另外接受 uncompressed 相當於不壓縮, producer 意味着壓縮類型由producer指定
./zookeeper-shell.sh test.myzk.com:2181/kafkacluster  #查看zk中kafka集群信息

另外,需要注意的是:
kafka 0.10+ 之后的版本,有個 __consumer_offsets 的topic也是需要清理的,需要定期注意該topic占用空間情況

生產環境kafka內核優化參數

vm.min_free_kbytes=4194304 即4G 系統16C32G內存
cat /proc/sys/vm/min_free_kbytes
該值表示強制Linux VM最低保留多少空閑內存 單位Kbytes
當可用內存低於該參數時,系統開始回收cache內存,以釋放內存,直到可用內存大於該值
目的:讓系統更加積極的回收cache內存

vm.zone_reclaim_mode=1
cat /proc/sys/vm/zone_reclaim_mode
管理當一個內存區域zone內部的內存耗盡時,是從其內部進行內存回收還是可以從其他zone進行回收
0 關閉zone_reclaim模式,允許從其他zone或NUMA節點回收內存[默認]
1 打開zone_reclaim模式,這樣內存回收只會發生在本地節點內
2 在本地回收內存時,可以將cache中的臟數據寫回硬盤,以回收內存
4 可以用swap方式回收內存
目的:限制內存回收不跨zone

清空cache (可選)
echo 1 > /proc/sys/vm/drop_caches

生產集群參數參考
zookeeper

zoo.cfg 配置文件

echo "1">/data/server/zkdata/myid
./zkServer.sh status

zookeeper日志清理zookeeper日志清理
./zkCleanup.sh  /data/server/zookeeper/data -n 100
./zkCleanup.sh 參數1 -n 參數2
參數1,zk data目錄,即zoo.cfg文件中dataDir值
參數2,保存最近的多少個快照
kafka

server.properties 配置文件

在kafka啟動腳本中,需要添加JMX的支持,方便在kafkamanager中查看到更加豐富的數據
kafka-server-start.sh

 

使用supervisor管理zookeeper和kafka

 

 

kafka-manager

項目地址:https://github.com/yahoo/kafka-manager

讓一般用戶免密登錄,且只有查看權限:
修改conf/application.conf

topic 操作
Delete Topic 刪除 topic
Reassign Partitions 平衡集群負載
Add Partitions 增加分區
Update Config Topic 配置信息更新
Manual Partition Assignments 手動為每個分區下的副本分配 broker
Generate Partition Assignments 系統自動為每個分區下的副本分配 broker

一般而言,手動調整、系統自動分配分區和添加分區之后,都需要調用 Reassign Partition

 

轉載請注明:輕風博客 » Kafka在線修改topic日志保存時長(不停機,不重啟)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM