PIP-242: Topic name restrictions
- Dominant language
- Java
- Stars
- 15.3k
- Forks
- 3.8k
- Avg merge
- 1d 14h
- Merged PRs (30d)
- 160
Description
### Motivation
Currently, the Apache Pulsar has no restrictions on the topic name. For example, we allowed users to create topic with `-partition-` keyword, which is confusing for our developers to identify whether this is a partition of a partitioned topic. Plus, we need to add more logic to be compatible with this special topic name. for example:
- https://github.com/apache/pulsar/pull/19240
- https://github.com/apache/pulsar/pull/19230
- https://github.com/apache/pulsar/pull/19171
- https://github.com/apache/pulsar/pull/19086
- ...
### Goal
This proposal aimed to add more restrictions for a topic name. that includes three parts as follows:
1. Using `NamedEntity` to validate the topic name characters.
2. Make the `-partition-` string the keyword. That allows the user to use it when it's a partitioned topic.
**Create a topic:**
_no corresponding partitioned topic_
- persistent://public/default/local-name (passed)
- persistent://public/default/local-name-partition-z (rejected by keyword)
- persistent://public/default/local-name-partition-0 (rejected by keyword)
_Has corresponding partitioned topic, **partitions=2** and topic partition name is **persistent://public/default/local-name**_
- persistent://public/default/local-name-partition-0 (passed, Because it is the partition topic's sub-partition)
- persistent://public/default/local-name-partition-z (rejected by keyword)
- persistent://public/default/local-name-partition-4 (rejected, Because it exceeds the number of maximum partitions)
**Create a partitioned topic(topic metadata)**
- persistent://public/default/local-name (passed)
- persistent://public/default/local-name-partition-z (rejected by keyword)
- persistent://public/default/local-name-partition-0 (rejected by keyword)
### Compatibility
We will introduce the new configuration `strictTopicNameEnabled` to support compatibility. Users can easily disable it to get rid of the restrictions.
### API Changes
Add a new configuration, `strictTopicNameEnabled=false`.
### Implementation
1. Add configuration `strictTopicNameEnabled=false` and make it dynamic.
2. Add topic name validation by `NamedEntity`
3. Add partitioned topic rejection logic.
4. Add warning logs to inform users that we do not recommend creating topics that name with the restrictions name when users disable `enableStrictTopicName`.
5. Make `strictTopicNameEnabled=true` in the next major release. and mark that this config will be removed in the future.
Contributor guide
Assessment
This issue has not been assessed yet.