上线 Kafka 集群, 总结了一个 check list, 作为注意事项.
日志
- appender 修改成 kafkaAppender, 不知道为何默认居然是 stdout
- Appender类型修改成 RollingAppender, 100MB 一个文件, 最多写 10 个
- DailyRollingAppender 的方式最大的问题是要隔一段时间进行清理, 如果忘记清理, 一旦磁盘写满就显得很弱智
- 建议日志通过文件监听的方式接入 ELK, 通过监听文件的方式即可.
- 分布式环境下, 每台服务器上去
tail -f
太麻烦了 - 只有最紧急情况下, 上去tail 本机日志.
- 分布式环境下, 每台服务器上去
数据存储
-
log.retention.hours
数据存储时间, 根据default.replication.factor
和线上数据量预估做好容量规划 -
default.replication.factor
默认数据存储份数. 强烈建议 > 1.- 线上容量规划算法: 磁盘容量 = 每天预估数据量 X default.replication.factor X 日志存储天数( log.retention.hours/ 7)
- 例如,
log.retention.hours=168(7天)
,default.replication.factor=3
, 那么磁盘容量 = 每天日志大小 * 21
- 例如,
- 线上容量规划算法: 磁盘容量 = 每天预估数据量 X default.replication.factor X 日志存储天数( log.retention.hours/ 7)
-
log.retention.bytes
production 不建议使用. 做好线上磁盘报警, 一旦超出 70% 立马报警. staging 环境倒是推荐使用. -
num.partitions
默认分区个数. Kafka 也是基于 partition 个数做并行的. 但一定不建议设置成1. 可以考虑跟 broker 数量一致
zookeeper 设置
-
zookeeper.connect
kafka 在 zookeeper 上存放 metadata 的路径. 强烈建议使用 zookeeper 的chroot 特性- 例如
192.168.0.2:2181,192.168.0.2:2181/kafka-production
- 例如
监控相关
- 参见 kafka 知识结构中关于 metrics 内容.
- 使用自定义 reporters 将数据接入监控系统
- 开启 mx4j 功能, 大不了使用使用单独脚本通过 HTTP 方式获取所需数据
-
export JMX_PORT=端口
方式开启 JMX, 方便使用 kafka-manager
网络相关
-
advertised.listeners
暴露 IP 地址或者 broker 域名, 避免 broker 使用获取到的本机 host name 而其他服务器不知道该域名(未统一配置 DNS)
JDK 相关
- JDK 版本. 建议升级到 1.8
- JVM 内存设置. 建议留一些给系统 page cache
-
-XX:-OmitStackTraceInFastThrow
确保日志中所有 Exception 都有stack trace, 关闭这个我认为 JVM 中最蛋疼
的优化 -
–XX:+PreserveFramePointer
, 如果你觉得你有一天会使用 perfj 画 Kafka broker 的 Flame Graph 的话
系统相关
- ntp
- ulimit
- JDK 版本. 建议升级到 1.8
暂时想到的就这些.
-- EOF --