kafka队列堆积问题的常见排查

1. 检查生产者和消费者的速率

生产者吞吐量测试:

复制代码
kafka-producer-perf-test.sh --topic <your-topic>  # 需要填写测试的主题名,如 "my-topic"
--num-records <count>  # 需要填写消息的数量(例如:100000)
--record-size <size>  # 需要填写消息的大小(字节数,例如:1024)
--throughput <rate>  # 需要填写生产者的吞吐量(每秒发送的消息数量,如:10000)
--producer-props bootstrap.servers=<brokers>  # 需要填写 Kafka 集群的 brokers(如:"kafka-broker1:9092,kafka-broker2:9092")

消费者吞吐量测试:

复制代码
kafka-consumer-perf-test.sh --topic <your-topic>  # 需要填写测试的主题名,如 "my-topic"
--broker-list <brokers>  # 需要填写 Kafka 集群的 brokers(如:"kafka-broker1:9092,kafka-broker2:9092")
--messages <count>  # 需要填写要消费的消息数量(例如:100000)
--group <your-consumer-group>  # 需要填写消费者组名,如 "my-consumer-group"
2. 查看 Kafka 消费者组的状态

查看某个消费者组的偏移量:

复制代码
kafka-consumer-groups.sh --bootstrap-server <brokers>  # 需要填写 Kafka brokers(如:"kafka-broker1:9092,kafka-broker2:9092")
--describe --group <your-consumer-group>  # 需要填写消费者组名,如 "my-consumer-group"

查看所有消费者组的状态:

复制代码
kafka-consumer-groups.sh --bootstrap-server <brokers>  # 需要填写 Kafka brokers(如:"kafka-broker1:9092,kafka-broker2:9092")
--list  # 列出所有消费者组
3. 查看 Kafka 主题的分区情况

查看某个主题的分区信息:

复制代码
kafka-topics.sh --bootstrap-server <brokers>  # 需要填写 Kafka brokers(如:"kafka-broker1:9092,kafka-broker2:9092")
--describe --topic <your-topic>  # 需要填写主题名,如 "my-topic"

查看所有主题:

复制代码
kafka-topics.sh --bootstrap-server <brokers>  # 需要填写 Kafka brokers(如:"kafka-broker1:9092,kafka-broker2:9092")
--list  # 列出所有主题
4. 查看 Kafka 集群的资源使用情况

查看 Kafka broker 的状态:

复制代码
kafka-broker-api-versions.sh --bootstrap-server <brokers>  # 需要填写 Kafka brokers(如:"kafka-broker1:9092,kafka-broker2:9092")

查看 Kafka broker 的详细信息:

复制代码
kafka-broker-api-versions.sh --bootstrap-server <brokers> --describe  # 需要填写 Kafka brokers(如:"kafka-broker1:9092,kafka-broker2:9092")
5. 查看 Kafka 消息堆积情况

使用 kafka-run-class.sh 查看堆积的消息:

复制代码
kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --zookeeper <zookeeper-server>  # 需要填写 Zookeeper 服务器地址(如:"zookeeper1:2181")
--topic <your-topic>  # 需要填写主题名,如 "my-topic"
--group <your-consumer-group>  # 需要填写消费者组名,如 "my-consumer-group"

查看 Kafka 消息日志目录的磁盘占用情况:

复制代码
du -sh /var/lib/kafka/logs  # 需要根据实际 Kafka 配置文件中的日志路径来调整,默认路径是 "/var/lib/kafka/logs"

查看 Kafka 消息的堆积情况(Prometheus):

复制代码
curl http://<kafka-broker>:<port>/metrics | grep "log"  # 需要填写 Kafka broker 的地址和端口(如:"kafka-broker1:9092")
6. 查看 Kafka 节点的负载和资源使用

检查 Kafka 节点的负载情况(CPU、内存、磁盘):

复制代码
top -u kafka  # 这将显示 Kafka 进程的 CPU 和内存使用情况

#或者使用
htop  # 更加友好的交互式命令,查看 Kafka 进程的负载

查看 Kafka 磁盘使用情况:

复制代码
df -h /var/lib/kafka  # 需要填写 Kafka 数据目录所在路径,默认是 "/var/lib/kafka"
7. 监控 Kafka 的性能和健康状况

Kafka Metrics (JMX): 启动 JMX 客户端:

复制代码
jconsole <kafka-broker-ip>:<jmx-port>  # 需要填写 Kafka broker 的 IP 地址和 JMX 端口(通常默认为 1099)
8. 查看生产者和消费者日志

生产者日志:

复制代码
tail -f /var/log/kafka/producer.log  # 需要根据实际日志文件路径来调整,默认路径可能是 "/var/log/kafka"

消费者日志:

复制代码
tail -f /var/log/kafka/consumer.log  # 需要根据实际日志文件路径来调整,默认路径可能是 "/var/log/kafka"
9. 查看 Kafka 配置

查看 Kafka 配置文件(server.properties):

复制代码
cat /etc/kafka/server.properties  # 需要填写 Kafka 配置文件路径,默认路径通常是 "/etc/kafka/server.properties"

常见关键配置项:

log.retention.hours:设置消息的保留时间(单位:小时)

log.retention.bytes:设置日志文件的最大大小

num.partitions:默认分区数

log.segment.bytes:日志文件的最大大小

10. Kafka 消费者线程调优

查看消费者处理的线程数和调整并发度:

复制代码
ps aux | grep kafka-consumer  # 查看 Kafka 消费者进程的详细信息,包括线程数、CPU 和内存使用等
相关推荐
samforce4 小时前
为什么微服务会退化成“分布式单体”?——软件架构里的嵌套率传导定律
人工智能·分布式·微服务·架构·软件架构·结构认知
我不会起名字3225 小时前
Kafka 顺序消息为什么乱了:分区数变化与重试的 3 类原因
kafka·消息队列·顺序·排查
每天一道题1 天前
Kafka 是如何工作的?从 Broker、Partition、Offset 到 Consumer Group
分布式·kafka
用户1494484813201 天前
为什么大厂很少直接用 2PC/TCC?聊聊分布式事务在真实业务里的落地套路
分布式·后端
code_slave(码畜)1 天前
微服务架构落地:分库分表实战(下) —— 分布式主键、跨分片查询与分页聚合防坑
数据库·spring boot·分布式·spring cloud·微服务·架构·分库分表
德迅云安全-上官1 天前
新一代智能分布式云接入:应用加速守护 TCP 业务安全与体验
分布式·tcp/ip·安全
凯凯姜1 天前
分布式定时任务重复执行与故障恢复
分布式
ClouGence1 天前
还在用命令行管理 Kafka?开源 CloudDM 让操作更简单
数据库·kafka·开源
Sayai1 天前
Kafka 磁盘空间治理实战:retention 保留策略、log.dirs 在线扩容、分区跨盘迁移与不停机整体换盘
大数据·运维·分布式·kafka·消息队列
爱吃牛肉的大老虎1 天前
Redis之分布式 Session问题
数据库·redis·分布式