Kafka在Ubuntu上的实用配置建议
sudo apt update && sudo apt install openjdk-11-jdk -y。配置后通过java -version验证安装。zoo.cfg文件(tickTime=2000、dataDir=/var/lib/zookeeper、clientPort=2181),并为每个节点创建myid文件(内容为节点ID,如1、2)。/opt/kafka(或其他非root目录),创建专用日志目录(如/opt/kafka/logs),并修改所有权:sudo chown -R kafka:kafka /opt/kafka(kafka为用户,需提前创建)。broker.id(如0、1,集群中不可重复);listeners=PLAINTEXT://your_server_ip:9092(指定Broker监听的IP和端口);advertised.listeners=PLAINTEXT://your_public_ip:9092(客户端连接的地址,需替换为公网/内网IP)。zookeeper.connect=localhost:2181(单机部署用localhost,集群用逗号分隔的ZooKeeper节点地址,如zk1:2181,zk2:2181,zk3:2181)。log.dirs=/opt/kafka/logs(指定日志存储目录,建议用独立分区避免磁盘满);log.retention.hours=168(日志保留7天,可根据需求调整为168小时或7天);log.segment.bytes=1073741824(单个日志段大小为1GB,避免段文件过多影响性能)。num.partitions=3(默认分区数,根据消费者并行需求调整,如消费者线程数为4则设置为4或更高);default.replication.factor=3(默认副本因子,集群中至少3个Broker时设置为3,保证数据冗余)。ext4或XFS文件系统(XFS对大文件和高并发支持更好);挂载时添加noatime选项(减少文件访问时间更新,提升性能)。* soft nofile 100000、* hard nofile 100000,写入/etc/security/limits.conf);调整TCP参数(net.ipv4.tcp_fin_timeout=30、net.ipv4.tcp_tw_reuse=1,提升网络连接复用率);禁用swap(sudo swapoff -a,避免磁盘I/O竞争)。num.io.threads=8(设置为CPU核心数的2倍,处理磁盘读写请求);num.network.threads=4(处理网络请求,根据并发量调整)。batch.size=1048576(批量发送大小为1MB,提升生产者吞吐量);linger.ms=100(发送延迟100ms,合并小批次);compression.type=snappy(启用Snappy压缩,减少网络传输量,压缩比约2-3倍)。KAFKA_HEAP_OPTS="-Xms4G -Xmx4G",初始和最大堆内存设为相同值,避免频繁GC;根据服务器内存调整,建议不超过物理内存的70%)。default.replication.factor=3(每个分区有3个副本,分布在不同Broker上);min.insync.replicas=2(写入时需至少2个副本确认,保证数据可靠性)。kafka-topics.sh --alter命令调整已有主题的分区数)。ufw限制端口访问(sudo ufw allow 9092/tcp、sudo ufw allow 2181/tcp),仅允许可信IP访问Kafka和ZooKeeper端口。keystore.jks和truststore.jks),修改server.properties中的listeners=SSL://your_server_ip:9092、ssl.keystore.location=/path/to/keystore.jks、ssl.keystore.password=your_password等参数,加密Broker与客户端之间的通信。server.properties中的security.inter.broker.protocol=SASL_PLAINTEXT、sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256、sasl.enabled.mechanisms=SCRAM-SHA-256),并创建用户(通过kafka-configs.sh命令),防止未授权访问。kafka_server_BrokerTopicMetrics_MessagesInPerSec、kafka_server_BrokerTopicMetrics_BytesInPerSec等指标),或使用Kafka自带的kafka-topics.sh、kafka-consumer-groups.sh命令查看主题状态和消费者滞后情况。log4j.properties文件,设置log.retention.hours和log.segment.bytes),定期清理旧日志(如每周清理超过7天的日志),避免磁盘空间耗尽。/opt/kafka/logs)和ZooKeeper数据目录(/var/lib/zookeeper),可使用rsync或tar命令;制定灾难恢复计划(如重新部署集群并恢复数据)。