apache/druid · error · IllegalArgumentException

Cannot convert to Long offset

Error message

Cannot convert %s to Long offset

What it means

Offset-sequence conversion guard in KafkaSupervisor.createSequenceOffsetFromObject: sequence offsets in supervisor metadata must be numeric or numeric-string; Jackson may deserialize numbers as Integer, which is handled, but any other object type (e.g. a map or boolean in corrupted metadata) cannot be converted to a Kafka Long offset and is rejected.

Solutions

  1. Inspect and repair the supervisor's dataSource metadata store entry; corrupt offsets usually indicate a bad manual edit or version mismatch.
  2. Reset offsets for the affected partitions via the supervisor reset endpoint.
  3. Ensure numeric offsets are submitted as numbers or digit strings when updating metadata.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/supervisor/KafkaSupervisor.java:417 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07). Data as JSON: /api/errors/d41e9341edd7e7bf. Report an issue: GitHub.

Appendix: source

Thrown at extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/supervisor/KafkaSupervisor.java:417

  }

  @Override
  protected KafkaTopicPartition createPartitionIdFromString(String partitionIdString)
  {
    return KafkaTopicPartition.fromString(partitionIdString);
  }

  @Override
  protected Long createSequenceOffsetFromObject(Object offsetObj)
  {
    // Jackson may deserialize numbers as Integer if they fit, but Kafka needs Long
    if (offsetObj instanceof Number) {
      return ((Number) offsetObj).longValue();
    }
    if (offsetObj instanceof String) {
      return Long.parseLong((String) offsetObj);
    }
    throw new IllegalArgumentException("Cannot convert " + offsetObj.getClass() + " to Long offset");
  }

  @Override
  protected boolean useExclusiveStartSequenceNumberForNonFirstSequence()
  {
    return false;
  }

  @Override
  protected boolean isEndOffsetExclusive()
  {
    return true;
  }

  @Override
  public LagStats computeLagStats()
  {
    Map<KafkaTopicPartition, Long> partitionRecordLag = getPartitionRecordLag();

View on GitHub (pinned to 9b90983fd2)