> 文档中心 > 【大数据之故障处理】

【大数据之故障处理】


项目场景:Kafka 集群单个topic partition历史数据没有删除


问题描述

【背景】Kafka集群多台broker节点磁盘告警,使用率超告警线。


原因分析:

    ○ 定位1:找到磁盘存储使用率最大的目录,定位到topic主题xxx○ 排查1:判断topic是否有流量突增,检查发下流量一直平稳。也不足以写满单分区2.2T。○ 定位2:topic历史数据没有清理○ 排查2:同一磁盘其他topic分区数据正常删除,找到多个异常topic分区分布的broker磁盘进行检查。○ 定位3:集群中只有这一个topic有异常,初步怀疑delete线程异常导致(之前出现过一次,重启恢复)○ 解决方案1:重启broker。○ 结果1:重启无法解决。○**最终定位**:通过from-beginning消费topic发现第一条消息时间戳异常(**脏数据**)。

解决方案:

【最终解决方案】:○ 配置分区大小(retention.byte)删除历史数据方式先清理掉脏数据,待脏数据清理后时间清理线程恢复对异常主机的清理判断。【脏数据说明】主题第一条消息时间戳异常(时间戳显示是2037年的)

拓展:

【Kafka消息时间戳】
1、producer在创建ProducerRecord时可以指定时间戳;
2、ProducerRecord:增加了timestamp字段,允许producer指定消息的时间戳,如果不指定的话使用producer客户端的当前时间

补充:

【kafka支持的消息时间戳类型】
参数:log.message.timestamp.type
参数说明:设置消息时间戳记录的内容,可记录消息创建的时间,或者消息数据写入时间。

1、CreateTime:producer建立这条消息的时间;
2、LogAppendTime:leader broker将这条消息写入到log的时间