Kafka Broker集群上线 check list

上线 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
  • 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 --

你可能感兴趣的:(Kafka Broker集群上线 check list)