《Kafka 常见问题排查》
本文整理 Kafka 消费端的两个高频报错及处理思路。
1 OffsetOutOfRangeException
报错
org.apache.kafka.clients.consumer.OffsetOutOfRangeException:
Offsets out of range with no configured reset policy for partitions:
{app-log-0=<offset>}
原因
- 请求的 offset 已超出分区当前的范围。
- 消息可能已被保留期(retention)机制删除,分区内已经没有该 offset 对应的消息。
解决办法
- 更换
group.id,从新消费组重新消费。 - 设置
kafka.auto.offset.reset = latest(或earliest),让消费者在 offset 越界时自动重置。
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest");
官方参考:OffsetOutOfRangeException javadoc
2 No current assignment for partition
报错
Spark Streaming 消费 Kafka 时出现:
java.lang.IllegalStateException: No current assignment for partition ...
原因
两个 application 使用了同一个 group.id,导致消费者组的内存分配被另一个应用抢占。
解决办法
- 如需继续使用之前的
group.id,务必确保之前的 application 已被完全 kill 掉。 - 每个应用使用独立的
group.id是最稳妥的隔离方式。
3 小结
| 报错 | 常见原因 | 处理方式 |
|---|---|---|
| OffsetOutOfRangeException | offset 越界 / 消息被清理 | 换 group.id 或设 auto.offset.reset |
| No current assignment | 多应用共用 group.id | kill 旧进程或换独立 group.id |
| 消费速率上不去 | 消费者数超过分区数 | 减少消费者或增加分区 |
阅读 —
·
全站 —