Kafka Linux运维最佳实践
JAVA_HOME和PATH环境变量,确保Kafka能正常启动。zoo.cfg中的server.x参数(节点间通信)及每个节点dataDir下的myid文件(节点唯一标识)。setenforce 0)或配置允许Kafka端口(如9092、2181);配置/etc/hosts文件,将Broker主机名映射到静态IP,避免DNS解析延迟。broker.id:每个Broker的唯一标识(集群内不可重复);listeners:指定Broker监听的接口(如PLAINTEXT://0.0.0.0:9092);log.dirs:消息日志存储目录(建议使用独立磁盘,如/data/kafka-logs),避免单磁盘IO瓶颈;zookeeper.connect:ZooKeeper集群地址(如zoo1:2181,zoo2:2181,zoo3:2181);default.replication.factor:Topic默认副本数(生产环境建议设为3,保证数据冗余);min.insync.replicas:最小同步副本数(建议设为2,确保数据写入时至少有2个副本确认,兼顾性能与可靠性)。num.partitions),分区数量应大于消费者数量(每个分区只能被一个消费者线程消费),且随集群规模增长逐步增加(如初始设为3,后续可根据吞吐量需求扩容)。ulimit -n 65536),避免大量连接导致“Too many open files”错误;vm.swappiness=10(减少磁盘交换,优先使用物理内存)、vm.dirty_background_ratio=10(后台脏页刷新阈值)、net.core.somaxconn=65535(TCP连接队列长度)、net.ipv4.tcp_max_syn_backlog=65535(SYN队列长度),优化内存和网络性能。num.network.threads(网络请求处理线程,建议设为CPU核心数的1-2倍,如8核设为8)、num.io.threads(磁盘IO线程,建议设为磁盘数量的1-2倍,如3块磁盘设为6);log.segment.bytes(单个日志分段大小,建议设为128MB-512MB,过大导致日志清理延迟,过小增加IO次数)、log.retention.hours(日志保留时长,建议设为1-3天,根据业务需求调整);batch.size(批量发送字节数,建议设为1MB,减少网络请求次数)、linger.ms(发送延迟时间,建议设为100ms以上,合并小批次提升吞吐量);compression.type(压缩算法,如lz4,在吞吐量和CPU开销间平衡,默认none)。default.replication.factor=3(Topic副本数),确保数据在多个Broker上冗余存储;min.insync.replicas=2(最小同步副本数),生产者发送消息时需等待至少2个副本确认,避免数据丢失。auto.leader.rebalance.enable=true(自动Leader重平衡),当Leader Broker宕机时,ZooKeeper会自动选举新的Leader(从ISR同步副本集合中选择)。dataDir(包含集群元数据)和Kafka的log.dirs(包含消息数据),可使用rsync或专业备份工具(如Velero),防止数据丢失。min.insync.replicas时触发报警)。log.cleanup.policy=delete或compact,前者删除旧日志,后者压缩相同key的消息),设置log.retention.bytes(日志大小限制)和log.retention.hours(日志时长限制),避免日志文件占用过多磁盘空间;使用ELK Stack(Elasticsearch+Logstash+Kibana)聚合分析Kafka日志,快速定位问题。kafka-topics.sh --delete --topic old_topic --bootstrap-server broker:9092),释放资源。