一、环境准备:满足基础依赖
sudo apt update && sudo apt install openjdk-8-jdk安装,安装后用java -version验证是否成功。kafka_2.13-3.6.1.tgz),解压至指定目录(如/opt/kafka),便于后续管理。二、Kafka核心配置:优化稳定性
编辑config/server.properties(Kafka主配置文件),关键参数设置如下:
broker.id需设置为集群中唯一的整数(如0、1、2);listeners配置为PLAINTEXT://your_server_ip:9092(替换为实际IP),确保客户端能访问。log.dirs指定日志存储目录(如/opt/kafka/logs),需提前创建并赋予权限(sudo mkdir -p /opt/kafka/logs && sudo chown -R kafka:kafka /opt/kafka/logs);zookeeper.connect填写ZooKeeper集群地址(如zoo1:2181,zoo2:2181,zoo3:2181),确保Kafka与ZooKeeper通信正常。num.partitions设置Topic默认分区数(根据业务负载调整,如3-8个);default.replication.factor设置Topic默认副本数(至少为3,确保高可用);min.insync.replicas设置为2(保证数据同步的可靠性,避免脑裂)。num.network.threads(网络处理线程数)设置为8-16(根据CPU核心数调整);num.io.threads(I/O处理线程数)设置为8-16(需匹配磁盘数量);socket.send.buffer.bytes和socket.receive.buffer.bytes设置为1MB(优化网络传输性能)。三、ZooKeeper集群:保障元数据高可用 Kafka依赖ZooKeeper管理集群元数据(如Broker信息、Topic配置),需部署3或5节点的ZooKeeper集群:
conf/zoo.cfg文件,添加tickTime=2000(基本时间单位,毫秒)、dataDir=/var/lib/zookeeper(数据目录)、clientPort=2181(客户端端口);并配置集群节点信息(如server.1=zoo1:2888:3888、server.2=zoo2:2888:3888、server.3=zoo3:2888:3888)。bin/zkServer.sh start启动服务,用bin/zkServer.sh status检查状态(需确保多数节点为Leader或Follower状态)。四、启动与验证Kafka
bin/kafka-server-start.sh config/server.properties启动服务(建议配置为系统服务,如systemctl start kafka,实现开机自启)。bin/kafka-topics.sh --list --bootstrap-server your_server_ip:9092列出所有Topic,确认Kafka运行正常。bin/kafka-console-producer.sh --broker-list your_server_ip:9092 --topic test发送消息,用bin/kafka-console-consumer.sh --bootstrap-server your_server_ip:9092 --topic test --from-beginning接收消息,验证消息收发功能。五、性能优化:提升吞吐与稳定性
-Xmx4G -Xms4G,避免频繁GC)。ulimit -n 65536),避免大量连接导致资源耗尽;调整TCP参数(如net.core.somaxconn=65536、net.ipv4.tcp_max_syn_backlog=65536),提升网络并发能力。num.partitions,增加分区提升并行处理能力);优化生产者参数(batch.size=16384、linger.ms=10,批量发送提升吞吐);优化消费者参数(fetch.min.bytes=1、fetch.max.wait.ms=500,平衡延迟与吞吐)。六、高可用配置:确保故障自动恢复
--replication-factor 3(副本数为3),并将分区均匀分布在不同Broker上(如3个Broker各1个副本),确保某Broker宕机时,其他Broker能接管分区。auto.leader.rebalance.enable=true(默认开启),当Leader Broker宕机时,自动触发Leader选举,将分区Leader转移到其他副本;设置min.insync.replicas=2,确保数据同步到多数副本后才返回成功,避免数据丢失。七、监控与维护:预防问题发生
kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec)。log.retention.hours=168,保留7天日志;log.segment.bytes=1GB,每个日志分段最大1GB),避免日志占满磁盘;使用ELK Stack(Elasticsearch+Logstash+Kibana)聚合分析日志,快速定位问题。/var/lib/zookeeper)和Kafka日志目录(/opt/kafka/logs),可使用rsync或scp工具;制定恢复流程(如从备份中恢复数据目录,重启Kafka和ZooKeeper)。