kafka-console-consumer.sh --bootstrap-server kafka:9092 \
  --topic order-event --partition 3 --offset 8823100 --max-messages 1
# consumer.properties
value.deserializer=org.apache.kafka.common.serialization.ErrorHandlingDeserializer

order-event 的 3 号分区 lag 从 2 万涨到 318 万,消费日志每秒重复一条 SerializationException: Unknown magic byte,其他分区正常。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:生产端换过序列化格式,一条旧格式消息混进来,反序列化在 poll 之后立刻抛错。默认错误处理器会一直重试同一条记录,位点永远不前进。

围绕「Kafka 脏消息阻塞」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。同一份配置存在多处的,先确认改的是被加载的那一份。

新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

处理上按这个顺序:先把这条消息的 offset 和内容导出来确认格式;配置 ErrorHandlingDeserializer 让坏消息落到死信 topic;跳过这一条后手动提交位点 恢复分区消费;生产端加格式版本号 消费端按版本选择解析器。

确认没问题再收工,3 号分区 lag 开始下降 日志里不再重复同一条 SerializationException。

作者 9823189