一、Kafka在Ubuntu上的监控方法
常用监控工具组合
kafka_exporter job(指定metrics_path为/metrics、scrape_interval为15s),使用Grafana导入Kafka专用看板(如“Kafka Cluster Monitoring”),可可视化监控Broker吞吐量、Topic消息堆积、消费者组延迟、分区ISR状态等指标。docker run -d --rm -p 9000:9000 -e KAFKA_BROKERCONNECT=<broker_host:port> -e SERVER_SERVLET_CONTEXTPATH="/" obsidiandynamics/kafdrop),支持查看Topic详情、消费者组实时消费进度、Broker节点状态,界面友好且无需复杂配置。kafka-topics.sh --list --bootstrap-server localhost:9092查看Topic列表;kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group <group_id>查看消费者组的消费速率、偏移量提交情况及Lag(消息堆积)。kafka-server-start.sh)中添加JMX参数(如-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false),使用JConsole或VisualVM连接到localhost:9999,查看吞吐量(messages-in/bytes-in)、延迟(request-latency-avg)、线程状态等指标。关键监控指标
messages-in/sec、bytes-in/sec)、延迟(request-latency-avg/max)、磁盘使用率(log-dir空间)、网络连接数(network-connections)、ISR数量(isr-shrinks/expands,需避免频繁收缩)。lag,消费者组未消费的消息数)、副本状态(leader-count、follower-count,确保Leader分布均衡)、日志分段大小(log-segment-bytes,避免过大导致切换延迟)。records-consumed-rate)、偏移量提交间隔(commit-latency)、Lag趋势(需设置告警阈值,如Lag超过10万条)。二、Kafka在Ubuntu上的调优策略
Broker端调优
num.network.threads(处理网络请求的线程数,建议设为CPU核心数的50%,如8核设置为4)和num.io.threads(处理磁盘I/O的线程数,建议设为CPU核心数的50%,如8核设置为4),避免线程成为瓶颈。log.segment.bytes(日志分段大小,建议1GB,减少频繁切换)、log.retention.hours(数据保留时间,根据业务需求设为72-168小时)、socket.send.buffer.bytes/socket.receive.buffer.bytes(Socket缓冲区大小,建议1MB,提升网络传输效率)。num.partitions(建议与消费者线程数相等或略多,如10个消费者线程设为10),副本数(default.replication.factor)设为3(保证高可用),避免过多副本导致同步延迟。compression.type(如lz4,兼顾压缩率与CPU开销),减少网络传输数据量,提升吞吐量。生产者端调优
batch.size(每次批量发送的字节数,建议64KB-1MB,如1MB)和linger.ms(消息等待时间,建议10-100ms,如100ms),平衡延迟与吞吐量。compression.type(如snappy,低延迟场景)或lz4(高吞吐场景),启用retries(重试次数,建议3次以上)和retry.backoff.ms(重试间隔,建议100ms),提高消息可靠性。消费者端调优
fetch.min.bytes(每次拉取的最小字节数,建议1MB)和fetch.max.wait.ms(拉取等待时间,建议1-10s,如1s),减少网络请求次数。max.poll.records(每次poll的最大记录数,建议500-1000条)和enable.auto.commit(自动提交,建议设为false,改用手动提交commitSync,避免重复消费)。操作系统调优
ulimit -n 65535(临时)或修改/etc/security/limits.conf(永久),增加文件描述符限制;调整vm.swappiness(设为10,减少交换分区使用)、vm.dirty_background_ratio(设为10,后台刷脏页阈值)、net.core.somaxconn(设为1024,Socket连接队列长度)。atime(noatime选项);调整TCP参数(如net.ipv4.tcp_max_syn_backlog设为8192,增加SYN队列长度;net.ipv4.tcp_tw_reuse设为1,复用TIME-WAIT连接)。JVM调优
-Xms和-Xmx(初始与最大堆内存,建议设为物理内存的50%-70%,如8GB内存设为4GB-6GB),避免频繁Full GC;使用G1垃圾收集器(-XX:+UseG1GC),调整-XX:MaxGCPauseMillis(目标最大GC停顿时间,如200ms),减少GC对性能的影响。