在 CentOS 上构建高可用 Kafka 集群
一、架构与前提
二、部署步骤
sudo yum install java-1.8.0-openjdk-devel -y && java -version/etc/zookeeper/conf/zoo.cfg:
dataDir=/var/lib/zookeeperclientPort=2181initLimit=5、syncLimit=2server.1=zookeeper1:2888:3888、server.2=zookeeper2:2888:3888、server.3=zookeeper3:2888:3888sudo systemctl start zookeeper && sudo systemctl enable zookeeper/opt/kafkaconfig/server.properties(示例为节点 1):
broker.id=1(各节点唯一)listeners=PLAINTEXT://:9092advertised.listeners=PLAINTEXT://<本机IP或FQDN>:9092(便于外部访问)log.dirs=/var/lib/kafka/logszookeeper.connect=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.propertiessudo firewall-cmd --zone=public --add-port=9092/tcp --permanent && sudo firewall-cmd --zone=public --add-port=2181/tcp --permanent && sudo firewall-cmd --reload三、高可用关键配置与验证
/opt/kafka/bin/kafka-topics.sh --create --topic my-topic --bootstrap-server <任一BrokerIP>:9092 --partitions 3 --replication-factor 3/opt/kafka/bin/kafka-topics.sh --describe --topic my-topic --bootstrap-server <任一BrokerIP>:9092acks=all、retries=Integer.MAX_VALUE、enable.idempotence=true、max.in.flight.requests.per.connection=5(幂等生产者)/opt/kafka/bin/kafka-console-producer.sh --broker-list <任一BrokerIP>:9092 --topic my-topic --producer-property acks=all --producer-property enable.idempotence=true/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server <任一BrokerIP>:9092 --topic my-topic --from-beginning --group my-group四、稳定性与运维要点
kafka-server-start.sh 前设置 export KAFKA_HEAP_OPTS="-Xms4G -Xmx4G"(按机器内存调整)ulimit -n 65536;vm.max_map_count=262144bootstrap.servers 提升容错五、常见问题与排查
replication.factor >= 3 且分区分布均衡。replica.lag.time.max.ms,并检查频繁 GC。advertised.listeners 或防火墙未放行 9092;修正监听地址并开放端口。acks=1 或 min.insync.replicas 过低;改为 acks=all 并将 min.insync.replicas 设为 2(配合 replication.factor=3 使用)。