Debian Kafka监控技巧
kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec表示每秒入站字节数,kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions表示未同步副本数)。可通过kafka-run-class.sh kafka.tools.JmxTool命令实时查看(例如bin/kafka-run-class.sh kafka.tools.JmxTool --object-name kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec --jmx-url service:jmx:rmi:///jndi/rmi://:9997/jmxrmi --attributes OneMinuteRate --reporting-interval 1000),或修改kafka-server-start.sh添加export JMX_PORT="9999"启用JMX端口,再用JConsole、VisualVM等工具连接。kafka-topics.sh --describe --topic <topic_name> --bootstrap-server <broker>查看主题分区详情(如Leader、ISR数量);kafka-consumer-groups.sh --bootstrap-server <broker> --describe --group <group_id>实时监控消费者组延迟(CURRENT-OFFSET与LOG-END-OFFSET差值);kafka-broker-api-versions.sh检查Broker支持的API版本,确保兼容性。kafka_exporter(Docker Compose部署,配置--kafka.server参数指向Broker)收集Kafka指标,Prometheus抓取/metrics接口数据,Grafana导入Kafka面板(如starsliao/Prometheus项目的ID:21078)实现可视化,展示吞吐量、延迟、分区状态等指标。KAFKA_MANAGER_OPTS="-Djava.net.preferIPv4Stack=true -Dkafka.manager.zkhosts=<zk_hosts>"(替换为ZooKeeper地址),启动后通过Web界面管理集群(如查看Topic列表、Broker状态、消费者组详情)。top、htop监控Kafka进程CPU使用率(避免超过80%);vmstat 1查看内存使用(free内存充足,swap使用率为0);iostat -x 1监控磁盘I/O(await时间<10ms,%util<80%,避免磁盘成为瓶颈);ss -tuln | grep 9092查看网络连接数(避免过多连接导致端口耗尽)。server.log(路径为log.dirs配置的目录),通过grep、awk等工具分析关键信息(如ERROR级别的日志表示Broker异常,Leader election日志表示分区Leader切换,Replica lag日志表示副本同步滞后),及时定位问题。Debian Kafka调优技巧
KAFKA_HEAP_OPTS="-Xmx32G -Xms32G"),避免频繁GC;剩余内存留给操作系统页缓存(提升磁盘读取性能)。num.network.threads(网络线程数)设为CPU核数的1-2倍(如8核设12),num.io.threads(I/O线程数)设为CPU核数的2倍(如8核设16),提升并发处理能力。log.dirs配置多目录RAID0,如/data1/kafka,/data2/kafka),提升磁盘I/O性能(await时间<10ms);避免使用HDD(高延迟,无法应对高吞吐)。socket.send.buffer.bytes和socket.receive.buffer.bytes设为1MB(net.core.wmem_max和net.core.rmem_max设为2MB,通过sysctl -p生效),提升网络吞吐。num.partitions(初始分区数)根据预期吞吐量设置(如每分区10MB/s,目标100MB/s则设10);default.replication.factor(默认副本因子)设为3(生产环境),min.insync.replicas(最小ISR数)设为2(acks=all时防数据丢失,平衡可用性与一致性);unclean.leader.election.enable设为false(禁止非ISR副本成为Leader,避免数据丢失)。log.segment.bytes(日志段大小)设为1GB(小段便于快速删除过期数据,减少文件数量);log.retention.hours(保留时间)设为168小时(7天),或log.retention.bytes(保留大小)设为-1(无限保留),结合业务需求调整;log.cleanup.policy(清理策略)设为delete(默认,删除过期数据)或compact(适合键值数据,节省空间)。num.network.threads(网络线程数)设为CPU核数的1-2倍(如8核设12);num.io.threads(I/O线程数)设为CPU核数的2倍(如8核设16);log.flush.interval.messages(刷新间隔消息数)设为100000(减少刷盘次数,提升吞吐);log.flush.interval.ms(刷新间隔时间)设为1000ms(平衡性能与数据安全性)。batch.size(批量大小)设为128KB-1MB(如batch.size=131072),减少网络请求次数;linger.ms(等待时间)设为50-100ms(允许更多消息加入批次,提升吞吐,但增加延迟)。compression.type(压缩类型)设为snappy(平衡CPU开销与压缩率,推荐)或lz4(更高压缩率,但CPU开销略大),减少网络传输数据量。acks(确认机制)设为all(所有ISR副本确认,高可靠性,适合金融场景)或1(Leader确认,平衡可靠性与吞吐,适合大多数场景);retries(重试次数)设为3(网络抖动时自动重试,避免消息丢失)。max.poll.records(单次拉取最大消息数)设为1000(减少poll调用次数,提升吞吐)。fetch.min.bytes(最小拉取字节数)设为1MB(减少网络请求次数);fetch.max.wait.ms(最大等待时间)设为500ms(平衡延迟与吞吐,避免长时间等待);enable.auto.commit(自动提交)设为true(auto.commit.interval.ms设为5000ms,定期提交偏移量,简化逻辑)。KAFKA_HEAP_OPTS设为-Xmx6G -Xms6G(与Broker内存匹配,避免频繁GC);-XX:MetaspaceSize=96m(元空间初始大小,避免元空间溢出)。-XX:+UseG1GC),-XX:MaxGCPauseMillis=20(目标最大GC暂停时间,低延迟场景设为20ms以内),-XX:InitiatingHeapOccupancyPercent=35(触发并发GC的堆占用率,避免Full GC)。