Kafka集群部署与配置全指南

一、Kafka单节点部署详解

1. 软件准备与安装

下载Kafka发行版

wget https://downloads.apache.org/kafka/3.7.1/kafka_2.13-3.7.1.tgz

解压到指定目录

tar xf kafka_2.13-3.7.1.tgz -C /softwares/

2. 关键配置详解

server.properties核心配置

# 节点唯一标识(必须集群内唯一)
broker.id=91

# 数据存储目录(建议使用高性能磁盘)
log.dirs=/oldboyedu/data/kafka-logs

# ZooKeeper集群连接配置
zookeeper.connect=10.0.0.91:2181,10.0.0.92:2181,10.0.0.93:2181/oldboyedu-kafka371

配置说明

  • broker.id:每个Kafka节点的唯一ID,集群内不能重复
  • log.dirs:建议使用多块磁盘提高吞吐量(逗号分隔多个路径)
  • zookeeper.connect:ZooKeeper集群地址,路径/oldboyedu-kafka371实现命名空间隔离

3. 环境变量配置

# 创建环境变量文件
cat > /etc/profile.d/kafka.sh <<'EOF'
#!/bin/bash
export KAFKA_HOME=/oldboyedu/softwares/kafka_2.13-3.7.1
export PATH=$PATH:${KAFKA_HOME}/bin
EOF

# 立即生效
source /etc/profile.d/kafka.sh

4. 服务启停管理

启动Kafka(后台模式)

kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties

停止Kafka

kafka-server-stop.sh

验证启动

# 检查ZooKeeper注册信息
zkCli.sh ls /oldboyedu-kafka371/brokers/ids
# 应看到临时节点[91](表示broker 91已注册)

二、Kafka集群部署进阶

1. 集群节点配置同步

将主节点配置分发到其他节点

# 分发Kafka软件
scp -r /oldboyedu/softwares/kafka_2.13-3.7.1/ elk92:/oldboyedu/softwares/
scp -r /oldboyedu/softwares/kafka_2.13-3.7.1/ elk93:/oldboyedu/softwares/

# 分发环境变量
scp /etc/profile.d/kafka.sh elk92:/etc/profile.d/
scp /etc/profile.d/kafka.sh elk93:/etc/profile.d/

2. 各节点专属配置

在elk92节点修改

sed -i '/^broker.id/s#91#92#' $KAFKA_HOME/config/server.properties

在elk93节点修改

sed -i '/^broker.id/s#91#93#' $KAFKA_HOME/config/server.properties

关键检查点

  • 确保每个节点的broker.id唯一
  • 检查zookeeper.connect配置一致
  • 各节点log.dirs目录权限正确

3. 集群启动与验证

启动所有节点

# 在各节点分别执行
kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties

集群健康检查

# 查看ZooKeeper注册的所有broker
zkCli.sh ls /oldboyedu-kafka371/brokers/ids
# 预期输出:[91, 92, 93](三个临时节点)

# 使用Kafka自带工具验证
kafka-broker-api-versions.sh --bootstrap-server 10.0.0.91:9092

三、生产环境关键配置

1. server.properties优化建议

# 网络配置
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://10.0.0.91:9092

# 日志保留策略
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000

# 副本与ISR配置
default.replication.factor=3
min.insync.replicas=2
unclean.leader.election.enable=false

2. JVM调优建议

# 修改bin/kafka-server-start.sh
export KAFKA_HEAP_OPTS="-Xms4G -Xmx4G -XX:MetaspaceSize=96m -XX:+UseG1GC"
export KAFKA_JVM_PERFORMANCE_OPTS="-XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35"

四、集群管理技巧

1. 常用管理命令

主题操作

# 创建主题(3分区,2副本)
kafka-topics.sh --create \
  --bootstrap-server 10.0.0.91:9092 \
  --replication-factor 2 \
  --partitions 3 \
  --topic test-topic

# 查看主题列表
kafka-topics.sh --list --bootstrap-server 10.0.0.91:9092

生产者测试

kafka-console-producer.sh \
  --bootstrap-server 10.0.0.91:9092 \
  --topic test-topic

消费者测试

kafka-console-consumer.sh \
  --bootstrap-server 10.0.0.91:9092 \
  --topic test-topic \
  --from-beginning

2. 集群监控

使用kafka-topics.sh监控

kafka-topics.sh --describe \
  --bootstrap-server 10.0.0.91:9092 \
  --topic test-topic

使用JMX指标

export JMX_PORT=9999
kafka-server-start.sh config/server.properties

五、故障排查指南

1. 常见问题解决

问题1:ZooKeeper节点消失

  • 检查网络连接
  • 验证ZooKeeper集群健康状态
  • 检查Kafka日志中的连接错误

问题2:磁盘空间不足

# 检查日志目录
df -h /oldboyedu/data/kafka-logs

# 临时解决方案:调整保留策略
kafka-configs.sh --alter \
  --bootstrap-server 10.0.0.91:9092 \
  --entity-type topics \
  --entity-name test-topic \
  --add-config retention.ms=3600000

2. 日志分析要点

# 关键日志位置
tail -f $KAFKA_HOME/logs/server.log

# 重点关注:
# - Controller选举过程
# - ISR集合变化
# - 副本同步异常

六、安全加固建议

1. 基础安全措施

# 启用SASL认证
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN

2. 网络隔离

# 限制监听IP
listeners=PLAINTEXT://10.0.0.91:9092

# 启用防火墙规则
iptables -A INPUT -p tcp --dport 9092 -s 10.0.0.0/24 -j ACCEPT

总结

通过本文的详细指导,您已经完成了:

  1. Kafka单节点部署与配置
  2. 三节点集群的搭建与验证
  3. 生产环境关键参数调优
  4. 日常管理命令和监控方法

实际生产环境中建议:

  • 至少部署3个broker节点保证高可用
  • 监控磁盘使用率和ISR状态
  • 定期测试故障转移能力
  • 根据业务负载调整分区数和副本因子

附:集群验证完整流程

# 1. 创建测试主题
kafka-topics.sh --create \
  --bootstrap-server 10.0.0.91:9092 \
  --replication-factor 3 \
  --partitions 3 \
  --topic cluster-test

# 2. 生产测试消息
kafka-console-producer.sh \
  --bootstrap-server 10.0.0.91:9092 \
  --topic cluster-test

# 3. 消费测试消息(从不同节点)
kafka-console-consumer.sh \
  --bootstrap-server 10.0.0.92:9092 \
  --topic cluster-test \
  --from-beginning

# 4. 查看主题详情
kafka-topics.sh --describe \
  --bootstrap-server 10.0.0.93:9092 \
  --topic cluster-test
posted on 2025-03-31 17:30  Leo_Yide  阅读(2531)  评论(0)    收藏  举报