在Ubuntu上定制Kafka配置需围绕业务需求(如吞吐量、延迟、可靠性)调整Broker、Topic、生产者/消费者及操作系统参数。以下是分步指南及关键配置说明:
安装Kafka与依赖
确保Ubuntu系统已安装Java(≥8)和Zookeeper(Kafka依赖):
sudo apt update && sudo apt install -y openjdk-11-jdk
wget https://downloads.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz
tar -xzf apache-zookeeper-3.7.1-bin.tar.gz -C /opt && ln -s /opt/apache-zookeeper-3.7.1-bin /opt/zookeeper
下载并解压Kafka(以3.5.2为例):
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
修改核心配置文件
Kafka主配置文件位于/opt/kafka/config/server.properties,需调整以下基础参数:
broker.id(集群内唯一,如broker.id=0);listeners=PLAINTEXT://your_server_ip:9092(替换为服务器IP);log.dirs=/var/lib/kafka/logs(需提前创建,如sudo mkdir -p /var/lib/kafka/logs);zookeeper.connect=localhost:2181(若Zookeeper集群,需填写所有节点,如host1:2181,host2:2181)。sudo systemctl restart kafka # 若未配置systemd,用./kafka-server-stop.sh && ./kafka-server-start.sh
验证配置
通过命令行工具测试Broker是否正常运行:
# 创建测试Topic(1分区、1副本)
/opt/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
# 生产者发送消息
/opt/kafka/bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
# 消费者接收消息
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
num.network.threads(网络处理线程,默认3)设置为CPU逻辑核数×2(如8核设为16);num.io.threads(磁盘IO线程,默认8)设置为磁盘数×8(如2块SSD设为16),提升并发处理能力。log.flush.interval.messages(刷盘消息数,默认10000)可增大至100000(SSD)或更高,减少刷盘频率;log.flush.interval.ms(刷盘时间间隔,默认1000ms)可调整为3000ms(HDD),平衡性能与数据安全性。socket.send.buffer.bytes(发送缓冲区,默认100KB)和socket.receive.buffer.bytes(接收缓冲区,默认100KB)设置为1MB(1048576),提升网络传输效率。batch.size(批量大小,默认16KB)设置为32KB-1MB(如32768),linger.ms(等待时间,默认0)设置为10-20ms,合并小消息减少网络开销;compression.type(压缩算法,默认none)设置为lz4或snappy,降低传输和存储成本。fetch.min.bytes(每次拉取最小数据量,默认1B)设置为1KB-1MB(如1024),max.partition.fetch.bytes(单分区最大拉取量,默认1MB)设置为2-4MB,减少拉取次数。default.replication.factor(默认分区副本数,默认1)设置为3(跨可用区部署),min.insync.replicas(最小同步副本数,默认1)设置为2,确保数据冗余和高可用。log.retention.hours(日志保留时间,默认168小时/7天)根据业务需求调整为720小时(30天)或更长;log.retention.bytes(日志大小限制,默认-1无限制)设置为100GB-1TB,避免磁盘爆满。分区数 = max(预期吞吐量/单分区TPS, 消费者线程数×2)(如10万TPS需10个分区,20个消费者线程需20个分区)。partitioner.class参数指定自定义分区类。ulimit -n 65535临时设置,或修改/etc/security/limits.conf永久生效(添加kafka hard nofile 65535)。sysctl -w vm.swappiness=1)、调整TCP缓冲区(sysctl -w net.core.wmem_default=262144、net.core.rmem_default=262144),提升磁盘和网络性能。为避免重启服务器后Kafka停止,需配置systemd服务:
sudo vim /etc/systemd/system/kafka.service
[Unit]
Description=Apache Kafka Server
After=network.target zookeeper.service
Requires=zookeeper.service
[Service]
Type=simple
Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64"
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
User=kafka
Group=kafka
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable kafka
sudo systemctl start kafka
通过以上步骤,可根据业务需求(如高吞吐、低延迟、高可靠)定制Ubuntu Kafka配置。建议在测试环境验证配置效果后再应用于生产环境。