Debian环境下Kafka配置最佳实践
Java环境配置
Kafka依赖Java运行环境,推荐安装OpenJDK 11及以上版本。安装后需配置环境变量:
sudo apt update && sudo apt install openjdk-11-jdk
echo "export JAVA_HOME=$(readlink -f /usr/bin/javac | sed 's:/bin/javac::')" >> /etc/profile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile
source /etc/profile
验证安装:java -version。
Kafka安装与目录规划
从Apache官网下载最新稳定版Kafka(如3.5.2),解压至/opt目录(避免权限问题):
wget https://downloads.apache.org/kafka/3.5.2/kafka_2.13-3.5.2.tgz
tar -xzf kafka_2.13-3.5.2.tgz -C /opt/
ln -s /opt/kafka_2.13-3.5.2 /opt/kafka # 创建软链接便于管理
关键目录说明:
config/:存放配置文件(server.properties、zookeeper.properties);logs/:Kafka日志目录(需确保权限为kafka:kafka);data/:Zookeeper数据目录(若单独安装)。server.properties)集群标识与通信
broker.id:每个Broker的唯一整数标识(集群内不可重复),建议使用节点IP后两位(如192.168.1.101→11);listeners:Broker监听的协议与端口(内网环境可使用PLAINTEXT://:9092,生产环境建议启用SSL/TLS);advertised.listeners:客户端访问的Broker地址(需替换为公网或内网可解析的域名/IP,如PLAINTEXT://kafka-node1.example.com:9092)。Zookeeper连接
zookeeper.connect:Zookeeper集群地址(多节点用逗号分隔),如zookeeper1.example.com:2181,zookeeper2.example.com:2181,zookeeper3.example.com:2181;syncLimit(默认5)和initLimit(默认10),确保节点间同步稳定。高可用配置
default.replication.factor:Topic默认副本数(生产环境建议设为3,确保数据冗余);min.insync.replicas:最小同步副本数(需小于等于default.replication.factor,建议设为2,保证数据可靠性);unclean.leader.election.enable:禁止非同步副本成为Leader(设为false,避免数据丢失)。性能基础配置
num.partitions:Topic默认分区数(根据消费者线程数设置,如消费者有8个线程则设为8,最大化并行处理能力);log.dirs:日志存储目录(多块磁盘用逗号分隔,如/data/kafka1,/data/kafka2,提升IO吞吐量);num.io.threads:I/O线程数(设为CPU核心数的50%,负责磁盘写入);num.network.threads:网络线程数(设为CPU核心数的2/3,负责请求处理)。分区与副本设置
创建Topic时显式指定分区数和副本数(避免使用默认值),示例:
kafka-topics.sh --create \
--bootstrap-server kafka-node1.example.com:9092 \
--topic my_topic \
--partitions 8 \
--replication-factor 3 \
--config min.insync.replicas=2
验证Topic配置:kafka-topics.sh --describe --topic my_topic --bootstrap-server kafka-node1.example.com:9092。
动态修改分区
若需扩容分区,可使用--alter命令(注意:此操作可能导致数据倾斜,需谨慎):
kafka-topics.sh --alter \
--bootstrap-server kafka-node1.example.com:9092 \
--topic my_topic \
--partitions 16
可靠性配置
acks:消息确认机制(设为all,确保所有ISR副本都收到消息,保证可靠性);retries:重试次数(设为3,应对临时网络故障)。性能调优
batch.size:批处理大小(设为1MB,减少网络请求次数);linger.ms:批处理等待时间(设为100ms,平衡延迟与吞吐量);compression.type:压缩类型(设为lz4,降低网络传输和存储开销,CPU开销较小)。消费效率
fetch.min.bytes:单次拉取最小字节数(设为1MB,减少拉取次数);fetch.max.wait.ms:拉取最大等待时间(设为1000ms,平衡延迟与吞吐量);max.poll.records:单次拉取最大记录数(设为2000,避免单次处理过多数据导致OOM)。偏移量管理
enable.auto.commit:自动提交偏移量(设为false,手动提交更可靠);auto.offset.reset:无初始偏移量时的处理方式(设为latest,消费新消息;设为earliest,从头消费)。Zookeeper集群
zoo.cfg中的syncLimit(默认5)、initLimit(默认10),确保节点同步;监控与报警
min.insync.replicas、Broker宕机),及时通知运维人员。JVM调优
4-8GB(避免过大导致GC停顿);-XX:+UseG1GC),减少Full GC次数;export KAFKA_HEAP_OPTS="-Xms4G -Xmx4G"
export KAFKA_JVM_PERFORMANCE_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35"
分区扩展
SSL/TLS加密
ssl.keystore.location、ssl.truststore.location等参数;security.protocol=SSL、ssl.truststore.location。SASL认证
security.protocol=SASL_PLAINTEXT、sasl.mechanism=SCRAM-SHA-256);kafka-configs.sh工具)。