-
Notifications
You must be signed in to change notification settings - Fork 15.1k
KAFKA-6250: Use existing Kafka Connect internal topics without requiring ACL #4247
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -21,6 +21,7 @@ | |
| import org.apache.kafka.clients.admin.CreateTopicsOptions; | ||
| import org.apache.kafka.clients.admin.NewTopic; | ||
| import org.apache.kafka.common.KafkaFuture; | ||
| import org.apache.kafka.common.errors.ClusterAuthorizationException; | ||
| import org.apache.kafka.common.errors.TimeoutException; | ||
| import org.apache.kafka.common.errors.TopicExistsException; | ||
| import org.apache.kafka.common.errors.UnsupportedVersionException; | ||
|
|
@@ -229,13 +230,20 @@ public Set<String> createTopics(NewTopic... topics) { | |
| newlyCreatedTopicNames.add(topic); | ||
| } catch (ExecutionException e) { | ||
| Throwable cause = e.getCause(); | ||
| if (e.getCause() instanceof TopicExistsException) { | ||
| if (cause instanceof TopicExistsException) { | ||
| log.debug("Found existing topic '{}' on the brokers at {}", topic, bootstrapServers); | ||
| continue; | ||
| } | ||
| if (cause instanceof UnsupportedVersionException) { | ||
| log.debug("Unable to use Kafka admin client to create topic descriptions for '{}' using the brokers at {}," + | ||
| "falling back to assume topic(s) exist or will be auto-created by the broker", topicNameList, bootstrapServers); | ||
| log.debug("Unable to create topic(s) '{}' since the brokers at {} do not support the CreateTopics API.", | ||
| " Falling back to assume topic(s) exist or will be auto-created by the broker.", | ||
| topicNameList, bootstrapServers); | ||
| return Collections.emptySet(); | ||
| } | ||
| if (cause instanceof ClusterAuthorizationException) { | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. sorry, a bit late to the party, but if Kafka Connect can't create the topic but can still read / write to it, it should also have the describe rights. In which case, we can check if the topic exist using a describe? I feel that right now this might be introducing a bug. Say the Kafka Connect isn't authorized to create a topic and the topic doesn't exist, then it will still go on with the execution
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That's a fair point. I didn't think about it, but in fact if the user doesn't have permission to create the topic through the CreateTopic API, then they won't be able to use auto-creation either. I think it would be clearer to check topic existence prior to attempting creation. Then if topic creation fails due to a permission error, perhaps we should make the error fatal. @rhauch what do you think? |
||
| log.debug("Not authorized to create topic(s) '{}'." + | ||
| " Falling back to assume topic(s) exist or will be auto-created by the broker.", | ||
| topicNameList, bootstrapServers); | ||
| return Collections.emptySet(); | ||
| } | ||
| if (cause instanceof TimeoutException) { | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since we're in here anyway, can we fix the
ifin the line above to usecauseinstead ofe.getCause()?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sure.