apache/pulsar · error · RestException
Topic does not exist and cannot be auto-created
Error message
Topic does not exist and cannot be auto-created
What it means
internalCreateSubscriptionForNonPartitionedTopic found the topic absent and broker configuration disallows auto-creation (isAllowAutoTopicCreationAsync returned false), so subscription creation fails with 404 because there is no topic to subscribe to.
Source
Thrown at pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java:2491
return null;
});
}
private void internalCreateSubscriptionForNonPartitionedTopic(
AsyncResponse asyncResponse, String subscriptionName,
MessageIdImpl targetMessageId, boolean authoritative, boolean replicated,
Map<String, String> properties) {
validateTopicOwnershipAsync(topicName, authoritative)
.thenCompose(__ -> validateTopicOperationAsync(topicName, TopicOperation.SUBSCRIBE, subscriptionName))
.thenCompose(__ -> pulsar().getBrokerService().isAllowAutoTopicCreationAsync(topicName))
.thenCompose(isAllowAutoTopicCreation -> pulsar().getBrokerService()
.getTopic(topicName.toString(), isAllowAutoTopicCreation))
.thenApply(optTopic -> {
if (optTopic.isPresent()) {
return optTopic.get();
} else {
throw new RestException(Status.PRECONDITION_FAILED,
"Topic does not exist and cannot be auto-created");
}
}).thenCompose(topic -> {
if (topic.getSubscriptions().containsKey(subscriptionName)) {
throw new RestException(Status.CONFLICT, "Subscription already exists for topic");
}
return topic.createSubscription(subscriptionName, InitialPosition.Latest, replicated, properties);
}).thenCompose(subscription -> {
// Mark the cursor as "inactive" as it was created without a real consumer connected
((PersistentSubscription) subscription).deactivateCursor();
return subscription.resetCursor(
PositionFactory.create(targetMessageId.getLedgerId(), targetMessageId.getEntryId()));
}).thenRun(() -> {
log.info()
.attr("topic", topicName)
.attr("subscription", subscriptionName)
.attr("messageId", targetMessageId)View on GitHub (pinned to 820761864e)
Solutions
- Create the topic explicitly first, then create the subscription
- Enable topic auto-creation on the namespace/broker if that matches your policy
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java:2491 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of apache/pulsar@820761864e (2026-09-06).
Data as JSON: /api/errors/adf5cdecc6fd5c88.
Report an issue: GitHub.