1. 前置环境准备
sudo apt update && sudo apt install openjdk-8-jdk安装,验证java -version确认安装成功。zoo.cfg文件(设置dataDir、clientPort=2181、server.X=host:2888:3888),并在每个节点的dataDir下创建myid文件(写入节点ID,如1、2、3)。启动Zookeeper集群:bin/zkServer.sh start。2. Kafka Broker核心配置
编辑config/server.properties文件,关键配置项如下:
broker.id需为集群内唯一整数(如0、1、2);listeners=PLAINTEXT://your_server_ip:9092(指定Broker监听的IP和端口);advertised.listeners=PLAINTEXT://your_public_ip:9092(客户端连接的地址,若为云服务器需填写公网IP);log.dirs=/opt/kafka/logs(日志存储目录,建议挂载大容量磁盘,多目录用逗号分隔提升IO性能);zookeeper.connect=zoo1:2181,zoo2:2181,zoo3:2181(Zookeeper集群地址);default.replication.factor=3(默认副本因子,确保数据冗余)、min.insync.replicas=2(最小同步副本数,保证数据一致性)、unclean.leader.election.enable=false(禁止非同步副本成为leader,避免数据丢失)。3. 集群部署与启动
server.properties中的broker.id和advertised.listeners(指向对应节点的IP),确保zookeeper.connect指向同一Zookeeper集群。bin/kafka-server-start.sh -daemon config/server.properties(-daemon参数让进程在后台运行),通过tail -f logs/server.log查看启动日志,确认无报错。4. 高可用性保障
--replication-factor 3(副本数)和--partitions 6(分区数,建议为Broker数的倍数,提升并行处理能力),例如bin/kafka-topics.sh --create --topic my_topic --bootstrap-server broker1:9092,broker2:9092,broker3:9092 --replication-factor 3 --partitions 6。min.insync.replicas=2确保写入操作需同步到至少2个副本,避免数据丢失;unclean.leader.election.enable=false防止非同步副本成为leader,保证数据一致性。5. 性能优化配置
num.network.threads=8(网络线程数,处理客户端请求)和num.io.threads=8(IO线程数,处理磁盘读写),根据Broker硬件配置(如CPU核心数)适当增加。socket.send.buffer.bytes=1048576(发送缓冲区)、socket.receive.buffer.bytes=1048576(接收缓冲区)、socket.request.max.bytes=104857600(请求最大字节数),提升网络传输效率。log.dirs(提升IO性能);设置log.retention.hours=168(日志保留7天)、log.segment.bytes=1073741824(单个日志段1GB)、log.retention.check.interval.ms=300000(日志清理间隔5分钟),避免磁盘空间耗尽。6. 监控与维护
log4j.properties文件,设置log.retention.hours和log.cleanup.policy=delete),避免日志文件过大占用磁盘空间。dataDir目录(包含集群元数据)和Kafka的log.dirs目录(包含消息数据),可使用rsync或scp工具复制到异地存储。7. 常见问题排查
zookeeper.connect配置的地址是否正确,Zookeeper服务是否启动(bin/zkServer.sh status),防火墙是否放行2181端口。logs/server.log日志,常见原因包括端口冲突(如9092端口已被占用)、log.dirs目录权限不足(需赋予Kafka用户读写权限)、JVM内存不足(调整KAFKA_HEAP_OPTS参数,如-Xmx4G -Xms4G)。default.replication.factor(是否≥3)、min.insync.replicas(是否≥2)、unclean.leader.election.enable(是否为false),确保高可用配置生效。