一、环境准备:基础依赖与版本兼容性
JAVA_HOME环境变量,通过java -version验证安装。zookeeper.connect参数指向正确的Zookeeper地址(如localhost:2181)。net-tools(用于网络诊断)、lsof(查看端口占用)等工具。二、配置文件关键参数:Broker核心设置
broker.id需为集群内唯一整数(如0、1、2),用于区分不同Broker;listeners指定Broker监听的协议、IP和端口(如PLAINTEXT://0.0.0.0:9092),advertised.listeners需配置为客户端可访问的地址(如PLAINTEXT://your_server_ip:9092),避免客户端连接失败。log.dirs需指定多个日志存储目录(如/data1/kafka,/data2/kafka),实现磁盘负载均衡和故障恢复;num.partitions设置Topic默认分区数(根据吞吐量需求,如16或32),default.replication.factor设置Topic默认副本数(建议3,确保高可用);min.insync.replicas需大于1(如2),保证写入的可靠性(至少2个副本同步成功才返回成功)。zookeeper.connect需填写Zookeeper集群地址(如zk1:2181,zk2:2181,zk3:2181),zookeeper.session.timeout.ms(会话超时时间,默认6000ms)和zookeeper.connection.timeout.ms(连接超时时间,默认6000ms)需根据网络状况调整,避免频繁触发重连。三、JVM与内存优化:避免GC与OOM问题
KAFKA_HEAP_OPTS设置JVM堆内存(如-Xms8G -Xmx8G),建议堆内存不超过物理内存的40%(如16GB物理内存设置8GB堆),避免堆过大导致Full GC延迟;避免设置过大堆内存(如超过16GB),优先通过优化PageCache提升性能。-XX:+UseG1GC),并通过-XX:MaxGCPauseMillis设置最大GC暂停时间(如200ms),平衡吞吐量与延迟;-XX:InitiatingHeapOccupancyPercent(IHOP,默认45)设置为35,提前触发并发GC周期,减少Full GC次数。-XX:MetaspaceSize(初始元空间大小,默认256m)和-XX:MaxMetaspaceSize(最大元空间大小,默认512m)需根据Topic数量调整(如Topic较多时设置为1g),避免元空间溢出。四、磁盘与文件系统:提升IO性能
noatime,nobarrier选项(减少文件元数据操作,提升IO性能);log.segment.bytes(日志段大小,默认1GB)可根据消息量调整(如2GB),减少日志段数量,降低索引维护开销。每日消息数×平均消息大小×副本数×留存天数/压缩比);预留10%-20%的磁盘空间,避免日志膨胀导致磁盘满。五、网络与线程:提升并发处理能力
num.network.threads(网络线程数,默认3)设置为CPU核心数的1.5倍(如8核设置为12),处理客户端请求;num.io.threads(IO线程数,默认8)设置为CPU核心数的2倍(如8核设置为16),处理磁盘IO(如消息写入、读取);num.replica.fetchers(副本拉取线程数,默认1)设置为CPU核心数的0.5倍(如8核设置为4),提升副本同步效率。socket.send.buffer.bytes(发送缓冲区,默认102400字节)和socket.receive.buffer.bytes(接收缓冲区,默认102400字节)可根据网络带宽调整(如1Gbps带宽设置为1MB),提升网络传输效率。六、安全配置:保障数据安全
SASL/SCRAM),通过security.inter.broker.protocol设置为SASL_PLAINTEXT或SASL_SSL,并在server.properties中配置listener.name.sasl_plaintext.scram-sha-256.sasl.jaas.config(JAAS配置),确保Broker间通信安全。kafka-acls.sh命令),设置--producer(生产者权限)、--consumer(消费者权限)等,避免未授权访问。security.inter.broker.protocol=SASL_SSL),配置证书(如ssl.keystore.location、ssl.truststore.location),防止数据在传输过程中被窃取或篡改。七、监控与运维:保障集群稳定性
logrotate工具),定期清理旧日志(如保留7天),避免日志文件占用过多磁盘空间;监控Kafka日志中的错误信息(如kafkaServer.log中的ERROR级别日志),及时排查问题。zkServer.sh status),确保ZooKeeper正常运行;定期备份Kafka元数据(如__consumer_offsets Topic),避免元数据丢失;定期测试Kafka的高可用性(如重启Broker,验证副本同步是否正常)。