【Kafka】如何判断一个kafka集群是否稳定

403 篇文章 639 订阅 ¥99.90 ¥299.90
本文介绍了如何判断一个Kafka集群的稳定性,包括观察应用运行时的异常现象,如leader找不到、无法poll数据、客户端交互卡死等。建议检查broker节点负载、Kafka进程GC情况、线程CPU消耗、副本ISR状态以及协调器日志,以排查和解决可能的性能和不稳定问题。
摘要由CSDN通过智能技术生成

1.美图

在这里插入图片描述

2.背景

在流作业的生产环境中,作为应用最广泛的消息中间件,kafka集群的稳定性对业务的平稳起到重要作用。然而如何判断一个kafka集群的稳定性是一个运维人员的重要技能。

笔者结合经验总结了如下查看一个kafka不稳定状态下可能出现的现象:

应用运行过程中经常性发生leader找不到异常,如“LEADER_NOT_AVAILABLE,NOT_LEADER_FOR_PARTITION”等异常
应用运行过程中消费消息时抛出无法poll到数据的异常,

如sparkstreaming应用抛出“assertion failed: Failed to get records for (...) after polling for 512 ms”的异常

消费过程中出现 类似offsets out of range异常日志
客户端与kafka交互式“卡死”的异常,如Sparkstreaming在JobGenerator的线程中无限“卡死”,类似堆栈如下:

在这里插入图片描述
如果应用层看到如上类似异常,则需要考虑排查kafka集群是否存在性能/不稳定问题,排查方式可参考如下:

Kafka的broker进程所在节点的load值(该值越小,节点约稳定),改值应低于节点的processors(通过cat /proc/cpuinfo | grep processor查看),如果load较高,则需要考虑降低该值
kafka进程的gc情况(jstat -gcutils $kafka_pid 1000), 观察FGC列(full gc次数)以及FGCT列(full gc总耗时),如果这两列的值增大较快,则需要考虑调整broker进程GC,否则可能出现无法访问的情况

查看kafka进程中各线程运行的cpu消耗(top -H -p $broker_pid),如果存在部分线程cpu利用率居高不下(长期在90%),则需要查看分析对应线程(找出进程中消耗CPU较多的线程的方法),如果对应的线程均在同一个线程池(如kafka-request-handler线程池),则需要考虑调整相关线程池的线程数(如num.io.threads)

通过kafka-topic.sh --describe --topic命令查看部分topic的信息,在多副本的topic中,如果存在部分partition的ISR列表中的副本数 < 设置的replication数,则需要分析并调整相关参数(如num.replica.fetchers或num.io.threads)

在这里插入图片描述
查看coordinate日志,是否频繁打印shrinking,expanding相关的日志,如果存在,则同样表示集群当前处于不稳定状态

在这里插入图片描述
参考问题:不稳定的状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值