Kafka在Ubuntu上的最佳配置指南
Kafka依赖Java运行时环境(JRE),推荐使用OpenJDK 8或11(兼容性更好)。执行以下命令安装:
sudo apt update
sudo apt install openjdk-11-jdk -y
# 验证安装
java -version
建议设置JAVA_HOME环境变量(添加到/etc/environment):
echo "export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64" >> /etc/environment
source /etc/environment
Kafka通过Zookeeper实现集群协调,需先部署Zookeeper(建议使用Kafka自带的Zookeeper,简化管理):
# 下载并解压Kafka(以3.7.0为例)
wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
tar -xzvf kafka_2.13-3.7.0.tgz
sudo mv kafka_2.13-3.7.0 /opt/kafka
# 配置Zookeeper(编辑/opt/kafka/config/zookeeper.properties)
dataDir=/opt/zookeeper/data
clientPort=2181
# 启动Zookeeper
/opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties &
编辑/opt/kafka/config/server.properties,设置以下关键参数:
broker.id=0(集群中需唯一,多节点时依次递增)。listeners=PLAINTEXT://:9092(本地监听端口);advertised.listeners=PLAINTEXT://your_server_ip:9092(对外暴露的地址,供客户端连接)。log.dirs=/var/lib/kafka/logs(建议使用独立分区,避免磁盘空间不足)。zookeeper.connect=localhost:2181(集群中需填写所有Zookeeper节点,如host1:2181,host2:2181)。num.partitions=3(初始分区数,根据消费者数量调整);default.replication.factor=3(副本因子,生产环境建议≥3,确保数据可靠性)。/etc/security/limits.conf永久生效:ulimit -n 65536
/etc/sysctl.conf,添加以下配置优化网络性能:net.core.somaxconn=32768
net.ipv4.tcp_max_syn_backlog=16384
net.ipv4.tcp_tw_reuse=1
sysctl -p # 使配置生效
num.network.threads=8(处理网络请求的线程数,建议为CPU核心数的1-2倍)。num.io.threads=16(处理磁盘读写的线程数,建议为CPU核心数的2-3倍)。batch.size=16384(生产者批量发送的字节数,增大可提升吞吐量);linger.ms=10(等待批量发送的时间,平衡延迟与吞吐量)。compression.type=snappy(启用Snappy压缩,减少网络传输量,对CPU开销较小)。log.retention.hours=168(保留7天,根据业务需求调整);log.segment.bytes=1073741824(单个日志段大小,建议1GB,便于清理)。/opt/kafka/bin/kafka-server-start.sh,设置堆内存(根据服务器内存调整,建议占总内存的1/4-1/2):export KAFKA_HEAP_OPTS="-Xmx4G -Xms4G"
生成SSL证书并配置Kafka(参考Kafka官方文档),设置以下参数:
listeners=SSL://:9093
ssl.keystore.location=/path/to/keystore.jks
ssl.keystore.password=your_password
ssl.truststore.location=/path/to/truststore.jks
ssl.truststore.password=your_password
security.inter.broker.protocol=SSL
启用SASL/PLAIN认证(需配合Kerberos或LDAP),配置server.properties:
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
使用Prometheus+Grafana监控Kafka集群(收集kafka_server_开头的JMX指标),或使用Kafka自带的kafka-topics.sh、kafka-consumer-groups.sh等命令行工具。
配置Kafka日志轮转(编辑/opt/kafka/config/log4j.properties),限制日志文件大小和保留天数:
log4j.appender.kafkaAppender.MaxFileSize=100MB
log4j.appender.kafkaAppender.MaxBackupIndex=10
df -h),清理旧日志。若需高可用性,部署3个及以上Kafka Broker节点:
server.properties中的broker.id(如0、1、2)、log.dirs(指向不同磁盘)、zookeeper.connect(包含所有Zookeeper节点)。/opt/kafka/bin/kafka-topics.sh --describe --topic __consumer_offsets --bootstrap-server your_server_ip:9092)。通过以上配置,可在Ubuntu上搭建一个高性能、高可用的Kafka集群,满足大多数业务场景需求。配置前建议在测试环境验证,避免生产环境故障。