Ubuntu下Kafka配置最佳实践
sudo apt update && sudo apt install -y openjdk-8-jdk,验证版本:java -version。dataDir(数据存储路径,如/var/lib/zookeeper)、clientPort(客户端连接端口,默认2181),并设置myid文件(每台节点唯一ID)。broker.id:每台Broker的唯一标识(集群中不可重复,建议用IP后几位,如192.168.1.100→100);listeners:Broker监听地址(如PLAINTEXT://0.0.0.0:9092,允许所有IP连接;生产环境建议限制内网IP);advertised.listeners:对外暴露的地址(如PLAINTEXT://your_public_ip:9092,客户端通过此地址连接Broker);log.dirs:消息日志存储路径(建议用多个磁盘路径,如/data/kafka1,/data/kafka2,提升IO并行能力);zookeeper.connect:ZooKeeper集群地址(如localhost:2181或zk1:2181,zk2:2181,zk3:2181);delete.topic.enable:是否允许删除Topic(生产环境建议设为true,避免误操作导致Topic堆积)。kafka-server-start.sh中的KAFKA_HEAP_OPTS,建议分配物理内存的60%-70%(如16GB内存设为-Xms12G -Xmx12G),并启用G1垃圾回收器(-XX:+UseG1GC),优化GC性能。buffer.memory:生产者缓冲区大小(默认32MB),建议设为可用内存的50%-70%(如32GB内存设为16GB-21GB),提升批量发送效率;num.io.threads:IO线程数(默认8),建议设为CPU核心数的2-3倍(如8核设为16-24),处理磁盘IO操作。noatime,nodiratime,data=writeback选项(减少文件访问时间更新,提升写入性能)。--partitions 8),分散写入压力到多个磁盘;log.segment.bytes,默认1GB),增大至2GB-4GB,减少日志滚动频率;log.retention.hours,默认168小时/7天),根据业务需求调整(如30天)。ufw限制Kafka端口(9092、2181)访问,仅允许可信IP:sudo ufw allow from <trusted_ip> to any port 9092/tcp,sudo ufw enable。keystore.jks和truststore.jks),修改server.properties中的listeners为SSL://your_server_ip:9093,并设置ssl.keystore.location、ssl.truststore.location等参数。server.properties中的security.inter.broker.protocol=SASL_SSL、sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256),并配置用户密码(通过kafka-configs.sh命令创建用户)。kafka_server_BrokerTopicMetrics_MessagesInPerSec、kafka_server_BrokerTopicMetrics_BytesInPerSec等指标),或使用Kafka自带的kafka-topics.sh、kafka-consumer-groups.sh命令查看Topic状态、消费者组偏移量。logs/server.log)和ZooKeeper(logs/zookeeper.out)日志,分析ERROR或WARN信息(如磁盘空间不足、网络连接问题);设置日志轮转(log4j.properties中配置log4j.appender.ROLLINGFILE.MaxFileSize=100MB),避免日志文件过大。log.dirs)和ZooKeeper数据目录(dataDir),可使用rsync或tar命令;制定灾难恢复计划(如Broker宕机时,通过备份数据恢复)。