《Kafka 常见问题排查》

《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 对应的消息。

解决办法

  1. 更换 group.id,从新消费组重新消费。
  2. 设置 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
消费速率上不去 消费者数超过分区数 减少消费者或增加分区
阅读 — · 全站 —
🎸 我的歌单 0 首