上線 Kafka 集群, 總結了一個 check list, 作為注意事項.
日志
- appender 修改成 kafkaAppender, 不知道為何默認居然是 stdout
- Appender類型修改成 RollingAppender, 100MB 一個文件, 最多寫 10 個
- DailyRollingAppender 的方式最大的問題是要隔一段時間進行清理, 如果忘記清理, 一旦磁盤寫滿就顯得很弱智
- 建議日志通過文件監(jiān)聽的方式接入 ELK, 通過監(jiān)聽文件的方式即可.
- 分布式環(huán)境下, 每臺服務器上去
tail -f
太麻煩了 - 只有最緊急情況下, 上去tail 本機日志.
- 分布式環(huán)境下, 每臺服務器上去
數(shù)據(jù)存儲
-
log.retention.hours
數(shù)據(jù)存儲時間, 根據(jù)default.replication.factor
和線上數(shù)據(jù)量預估做好容量規(guī)劃 -
default.replication.factor
默認數(shù)據(jù)存儲份數(shù). 強烈建議 > 1.- 線上容量規(guī)劃算法: 磁盤容量 = 每天預估數(shù)據(jù)量 X default.replication.factor X 日志存儲天數(shù)( log.retention.hours/ 7)
- 例如,
log.retention.hours=168(7天)
,default.replication.factor=3
, 那么磁盤容量 = 每天日志大小 * 21
- 例如,
- 線上容量規(guī)劃算法: 磁盤容量 = 每天預估數(shù)據(jù)量 X default.replication.factor X 日志存儲天數(shù)( log.retention.hours/ 7)
-
log.retention.bytes
production 不建議使用. 做好線上磁盤報警, 一旦超出 70% 立馬報警. staging 環(huán)境倒是推薦使用. -
num.partitions
默認分區(qū)個數(shù). Kafka 也是基于 partition 個數(shù)做并行的. 但一定不建議設置成1. 可以考慮跟 broker 數(shù)量一致
zookeeper 設置
-
zookeeper.connect
kafka 在 zookeeper 上存放 metadata 的路徑. 強烈建議使用 zookeeper 的chroot 特性- 例如
192.168.0.2:2181,192.168.0.2:2181/kafka-production
- 例如
監(jiān)控相關
- 參見 kafka 知識結構中關于 metrics 內(nèi)容.
- 使用自定義 reporters 將數(shù)據(jù)接入監(jiān)控系統(tǒng)
- 開啟 mx4j 功能, 大不了使用使用單獨腳本通過 HTTP 方式獲取所需數(shù)據(jù)
-
export JMX_PORT=端口
方式開啟 JMX, 方便使用 kafka-manager
網(wǎng)絡相關
-
advertised.listeners
暴露 IP 地址或者 broker 域名, 避免 broker 使用獲取到的本機 host name 而其他服務器不知道該域名(未統(tǒng)一配置 DNS)
JDK 相關
- JDK 版本. 建議升級到 1.8
- JVM 內(nèi)存設置. 建議留一些給系統(tǒng) page cache
-
-XX:-OmitStackTraceInFastThrow
確保日志中所有 Exception 都有stack trace, 關閉這個我認為 JVM 中最蛋疼
的優(yōu)化 -
–XX:+PreserveFramePointer
, 如果你覺得你有一天會使用 perfj 畫 Kafka broker 的 Flame Graph 的話
系統(tǒng)相關
- ntp
- ulimit
- JDK 版本. 建議升級到 1.8
暫時想到的就這些.
-- EOF --