Kafka在Linux下的配置技巧
java -version检查是否安装,未安装时可通过包管理器(如Ubuntu的apt install openjdk-8-jdk、CentOS的yum install java-1.8.0-openjdk-devel)安装。kafka_2.12-3.5.2.tgz),解压至指定目录(如/opt/kafka)。关键目录包括:config(配置文件目录)、bin(命令脚本目录)、logs(日志存储目录,需手动创建)。/etc/profile或~/.bashrc文件,添加以下内容以简化命令执行:export KAFKA_HOME=/opt/kafka
export PATH=$PATH:$KAFKA_HOME/bin
执行source /etc/profile使配置生效。broker.id:集群中每个Broker的唯一整数标识(如0、1、2),需确保集群内无重复。listeners:Broker监听的地址和端口(如PLAINTEXT://your_server_ip:9092),若需外部访问,需将your_server_ip替换为公网或内网IP。advertised.listeners(推荐):客户端实际连接的地址,支持多协议(如PLAINTEXT://public_ip:9092,SSL://private_ip:9093),解决NAT环境下的连接问题。zookeeper.connect:指定Zookeeper集群地址(如zookeeper1:2181,zookeeper2:2181,zookeeper3:2181),需确保Broker能访问Zookeeper。log.dirs:日志文件存储路径(如/data/kafka/logs),建议使用独立磁盘分区以提高I/O性能,避免与系统文件竞争。log.retention.hours:日志保留时间(如168小时,即7天),可根据业务需求调整(如延长至720小时用于长期存储)。log.segment.bytes:单个日志段文件大小(如1073741824字节,即1GB),较大的段文件可减少文件数量,但会增加索引查找时间。num.network.threads:处理网络请求的线程数,建议设置为CPU核心数的1-2倍(如8核CPU设置为8-16)。num.io.threads:处理磁盘I/O操作的线程数,建议设置为磁盘数量的2-4倍(如4块磁盘设置为8-16)。batch.size:生产者批量发送的消息大小(如32768字节,即32KB),增大会减少网络请求次数,提高吞吐量。linger.ms:生产者等待批量发送的时间(如10毫秒),增大会增加单批次消息数量,但会增加延迟。compression.type:消息压缩类型(如snappy、lz4),可减少网络传输和存储开销(lz4压缩率更高,性能更好)。num.partitions:主题分区数,建议设置为消费者数量的2-3倍(如10个消费者设置为20-30),提高并行处理能力。default.replication.factor:默认副本因子(如3),确保数据高可用(需至少3个Broker节点)。KAFKA_HEAP_OPTS="-Xms8g -Xmx8g"(初始堆内存与最大堆内存一致,避免动态扩展开销)。-XX:+UseG1GC),减少Full GC停顿时间。ulimit -n 65535临时生效,永久生效需修改/etc/security/limits.conf(添加* soft nofile 65535、* hard nofile 65535)。/etc/sysctl.conf文件,添加以下参数以优化网络性能:net.core.somaxconn=32768 # 监听队列最大长度
net.ipv4.tcp_max_syn_backlog=8192 # SYN队列最大长度
net.core.rmem_max=16777216 # 接收缓冲区最大大小
net.core.wmem_max=16777216 # 发送缓冲区最大大小
执行sysctl -p使配置生效。vm.swappiness(如vm.swappiness=10),减少系统使用交换分区(Swap)的概率,避免OOM Killer终止Kafka进程。server.log、controller.log),分析错误信息(如Zookeeper连接失败、磁盘空间不足);设置日志轮转(如log4j.appender.kafkaAppender.MaxFileSize=100MB),避免日志文件过大占用磁盘空间。log.retention.hours参数自动清理,或手动执行kafka-log-dirs.sh --clean);备份Zookeeper数据(如定期复制dataDir目录),确保数据安全。