做好Ubuntu Kafka配置的完整指南
sudo apt update && sudo apt install -y openjdk-8-jdk
java -version # 验证安装,需显示Java版本信息
wget https://mirrors.estointernet.in/apache/zookeeper/zookeeper-3.6.3/zookeeper-3.6.3.tar.gz
tar -xzvf zookeeper-3.6.3.tar.gz
sudo mv zookeeper-3.6.3 /opt/zookeeper
/opt/zookeeper/conf/zoo.cfg文件,添加以下内容:tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
sudo mkdir -p /var/lib/zookeeper
sudo chown -R $(whoami):$(whoami) /opt/zookeeper /var/lib/zookeeper # 授权当前用户
sudo /opt/zookeeper/bin/zkServer.sh start # 启动服务
sudo netstat -plnt | grep 2181 # 验证端口是否监听
编辑Kafka配置文件(/opt/kafka/config/server.properties),调整以下关键参数:
broker.id:集群中每个Broker的唯一ID(如0、1、2),必须唯一。listeners:指定Broker监听的地址与端口(如PLAINTEXT://your_server_ip:9092,若需远程访问需替换localhost为服务器IP)。log.dirs:Kafka日志存储目录(如/var/lib/kafka),需提前创建并授权(sudo mkdir -p /var/lib/kafka && sudo chown -R kafka:kafka /var/lib/kafka)。zookeeper.connect:Zookeeper集群地址(如localhost:2181,多节点用逗号分隔)。num.partitions:新Topic的默认分区数(建议根据消费者数量设置,至少大于消费者数)。default.replication.factor:Topic副本因子(生产环境建议设为3,确保数据冗余)。/opt/kafka/bin/kafka-server-start.sh),设置堆内存大小(根据服务器内存调整,如4GB内存可设为-Xmx4G -Xms4G):export KAFKA_HEAP_OPTS="-Xmx4G -Xms4G"
可选:启用G1垃圾回收器(减少GC停顿):export KAFKA_JVM_PERFORMANCE_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=20"
num.network.threads:处理网络请求的线程数,默认3,高并发场景可增至8)。num.io.threads:处理磁盘读写的线程数,默认8,高负载场景可增至16)。socket.send.buffer.bytes/socket.receive.buffer.bytes:默认100KB,可增至1MB)。socket.request.max.bytes:默认100MB,防止过大请求导致Broker崩溃)。batch.size:默认16KB,可增至32KB)、延长发送延迟(linger.ms:默认0ms,可增至5-10ms)、启用压缩(compression.type:如gzip,减少网络带宽占用)。fetch.min.bytes:默认1B,可增至1MB)、延长拉取等待时间(fetch.max.wait.ms:默认500ms,可增至1s),减少网络请求次数。ulimit -n 65536
永久调整:编辑/etc/security/limits.conf,添加以下内容:* soft nofile 65536
* hard nofile 65536
/etc/sysctl.conf,添加以下内容优化网络性能:net.core.somaxconn=1024 # 增加TCP连接队列长度
net.ipv4.tcp_max_syn_backlog=8192 # 增加SYN队列长度
net.ipv4.tcp_tw_reuse=1 # 允许复用TIME-WAIT状态的连接
执行sudo sysctl -p使配置生效。/etc/systemd/system/zookeeper.service):[Unit]
Description=Zookeeper Service
After=network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
ExecStart=/opt/zookeeper/bin/zkServer.sh start
ExecStop=/opt/zookeeper/bin/zkServer.sh stop
User=zookeeper
Group=zookeeper
Restart=always
[Install]
WantedBy=multi-user.target
/etc/systemd/system/kafka.service):[Unit]
Description=Apache Kafka Server
After=zookeeper.service
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-8-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 zookeeper kafka
sudo systemctl start zookeeper kafka
ps -ef | grep kafka(应显示Kafka主进程)。netstat -plnt | grep 9092(应显示9092端口监听)。test,分区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
jconsole查看)。log.retention.hours:默认168小时,即7天,可根据需求调整),定期清理旧日志。/var/lib/zookeeper)和Kafka日志目录(/var/lib/kafka),防止数据丢失。