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
- Inspect and repair the supervisor's dataSource metadata store entry; corrupt offsets usually indicate a bad manual edit or version mismatch.
- Reset offsets for the affected partitions via the supervisor reset endpoint.
- 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)