Kafka依赖Java运行环境,推荐安装OpenJDK 8(兼容性最佳)。在CentOS上执行以下命令:
sudo yum install java-1.8.0-openjdk-devel -y
java -version # 验证安装(需显示Java版本信息)
从Apache官网下载稳定版本(如3.5.2),解压至指定目录(如/opt/kafka):
wget https://downloads.apache.org/kafka/3.5.2/kafka_2.12-3.5.2.tgz
tar -zxvf kafka_2.12-3.5.2.tgz
sudo mv kafka_2.12-3.5.2 /opt/kafka
将Kafka的bin目录添加至系统PATH,方便全局调用:
echo 'export PATH=$PATH:/opt/kafka/bin' >> ~/.bashrc
source ~/.bashrc
编辑/opt/kafka/config/server.properties,设置关键参数:
broker.id=0(集群中每个Broker需唯一);listeners=SASL_PLAINTEXT://your_server_ip:9092(指定监听协议与IP);advertised.listeners=SASL_PLAINTEXT://your_server_ip:9092(客户端连接的地址);log.dirs=/var/lib/kafka/logs(多目录用逗号分隔,提升IO并行度);zookeeper.connect=localhost:2181(集群模式下需填写多个Zookeeper节点,如host1:2181,host2:2181)。num.network.threads=CPU核数+1(处理网络请求的线程数,如4核CPU设为5);num.io.threads=CPU核数*2(处理磁盘IO的线程数,如4核CPU设为8);--partitions 5(提高并行处理能力)、--replication-factor 3(提升数据可靠性,集群节点数≥副本数);log.retention.hours=168(保留7天,按需调整)、log.segment.bytes=1073741824(日志段大小设为1GB,平衡磁盘IO与文件管理);compression.type=snappy(启用Snappy压缩,减少网络传输与存储开销,对延迟敏感场景可选lz4)。server.properties中添加:security.inter.broker.protocol=SASL_PLAINTEXT
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
创建JAAS配置文件/opt/kafka/config/kafka_server_jaas.conf:KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret"
user_producer="producer-secret"
user_consumer="consumer-secret";
};
启动时指定JAAS文件:export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf"。编辑/etc/sysctl.conf,添加以下参数以优化网络与磁盘IO:
vm.swappiness=1 # 禁止内存交换(避免IO瓶颈)
vm.dirty_background_ratio=5 # 脏页刷新后台阈值(%)
vm.dirty_ratio=10 # 脏页刷新强制阈值(%)
fs.file-max=1000000 # 最大文件描述符数
net.core.rmem_default=262144 # 接收缓冲区默认大小
net.core.wmem_default=262144 # 发送缓冲区默认大小
net.ipv4.tcp_wmem=4096 16384 131072 # TCP发送缓冲区大小
net.ipv4.tcp_rmem=4096 65536 1048576 # TCP接收缓冲区大小
net.core.somaxconn=65535 # 最大连接队列长度
执行sysctl -p使配置生效。
sudo mkfs.xfs /dev/sdb # 格式化磁盘(假设为/dev/sdb)
sudo mount -o noatime,nodiratime /dev/sdb /var/lib/kafka/logs # 挂载时关闭访问时间戳更新
添加至/etc/fstab实现开机自动挂载。编辑/etc/security/limits.conf,增加Kafka用户的资源限制:
kafka soft nofile 1000000
kafka hard nofile 1000000
kafka soft nproc 1000000
kafka hard nproc 1000000
在多台CentOS服务器上重复上述步骤,修改server.properties中的broker.id(如0、1、2)、listeners(各服务器IP)、zookeeper.connect(所有Zookeeper节点),启动多个Broker。
Kafka依赖Zookeeper实现集群管理,建议部署3或5节点Zookeeper集群(奇数节点保证容错性),修改zoo.cfg中的server.x配置(如server.1=zoo1:2888:3888)。
编辑kafka-server-start.sh,添加JMX参数:
export JMX_PORT=9999
使用JConsole、Prometheus+Grafana等工具监控Broker指标(如消息吞吐量、延迟、分区状态)。
配置Kafka日志清理策略(log.retention.hours、log.segment.bytes),定期检查/var/lib/kafka/logs目录,避免磁盘空间耗尽。
备份Zookeeper数据目录(dataDir)和Kafka日志目录(log.dirs),防止数据丢失。
通过以上步骤,可在CentOS上高效配置Kafka,兼顾性能、安全性与稳定性。需根据实际业务需求(如消息量、延迟要求)调整参数,并在生产环境前进行充分测试。