Hi Michael, Enrico

> The identifier is the name. The topics have `-DLQ` and `-RETRY`
> as suffixes, which makes them "special" (which reminds me of this
> thread [0]). We could choose to always make these non partitioned
> or to make them configurable in some other way.

I changed the design like this:

### Properties of Topic
```properties
"wasAutoCreated": boolean
```

- If the topic name ends with "-RETRY" or "-DLQ", only non-partitioned
   topics will be automatically created
- If the property `wasAutoCreated` of the topic is true and the topic name
   ends with "-RETRY" or "-DLQ", retry topics and dead letter queues
   will no longer be created for this topic.

How are you feeling?

Thanks
Yubiao Feng

On Thu, Jun 1, 2023 at 12:48 PM Michael Marshall <mmarsh...@apache.org>
wrote:

> We've had several bugs related to this topic of auto created
> partitioned topics recently. These three PRs come to mind:
>
> * https://github.com/apache/pulsar/pull/20370
> * https://github.com/apache/pulsar/pull/20392
> * https://github.com/apache/pulsar/pull/20397
>
> Those PRs rely on server side inference based on the topic name to
> know that a topic should not be a partitioned topic.
>
> In general, these problems hint to me that we need better definitions
> for "system" and "special" topics that break the rules of auto created
> topics in well defined ways.
>
> I agree with Enrico that "purposeOfAutoCreatedTopic" will create overhead.
>
> > I agree with you, but now the problem is that we still need
> > an identifier to say that it is a DLQ. Do you have some
> > suggestions?
>
> The identifier is the name. The topics have `-DLQ` and `-RETRY` as
> suffixes, which makes them "special" (which reminds me of this thread
> [0]). We could choose to always make these non partitioned or to make
> them configurable in some other way.
>
> Or, we could consider giving producers and consumers the option to
> configure a `partitionCountHint`. This could be used by the broker
> during auto creation to create a partitioned topic with x partitions
> when greater than 0 and to create a non-partitioned topic when 0. This
> moves the logic out of inference on topic names and into the realm of
> client configuration. However, it could create hard to debug
> scenarios.
>
> Thanks,
> Michael
>
> [0] https://lists.apache.org/thread/yrkf88jjpjzhmk6hy15ynnk3l6n96l9w
>
> On Wed, May 31, 2023 at 7:42 AM Yubiao Feng
> <yubiao.f...@streamnative.io.invalid> wrote:
> >
> > Hi @Enrico
> >
> > > I think that it is better to add flags like:
> > > - allowAutoTopiCreation: default "true", if "false" the broker
> > > won't create the topic in any case
> > > autoTopicCreationMode: undefined/partitioned/non-partitioned
> >
> > I agree with you, but now the problem is that we still need
> >  an identifier to say that it is a DLQ. Do you have some
> > suggestions?
> >
> > Thanks
> >
> > Yubiao Feng
> >
> >
> > On Wed, May 31, 2023 at 8:15 PM Enrico Olivelli <eolive...@gmail.com>
> wrote:
> >
> > > Yubiao,
> > > I understand your problem: DLQ and retry topic don't  play well with
> > > automatic topic creation.
> > >
> > > We are introducing wire protocol changes and also starting to add
> > > topic properties for every new topic (they come with a cost on
> > > metadata).
> > >
> > > I am not sure that adding the purposeOfAutoCreatedTopic property adds
> > > much value and I suggest to drop it.
> > > Logging on the broker that you created the topic is enough. I don't
> > > think that any application or even the broker would use that piece of
> > > information.
> > >
> > >
> > > Regarding topicPurpose I think that having this "list" of
> > > possibilities will become hard to maintain un the future.
> > >
> > > I think that it is better to add flags like:
> > > - allowAutoTopiCreation: default "true", if "false" the broker won't
> > > create the topic in any case
> > > - autoTopicCreationMode: undefined/partitioned/non-partitioned
> > >
> > > One problem with partitioned topic and DLQ is that you probably want
> > > the same number of partitions on the side topic as the original topic,
> > > so probably you have to carry that parameter (number of partitions).
> > >
> > > IIRC the Subscribe command is sent directly per each partition, so I
> > > don't know how these things may work well together.
> > >
> > > Enrico
> > >
> > >
> > > Il giorno sab 8 apr 2023 alle ore 05:55 Xiangying Meng
> > > <xiangy...@apache.org> ha scritto:
> > > >
> > > > Hi Yubiao,
> > > >
> > > > Appreciate your effort in initiating this PIP. I believe these
> changes
> > > will
> > > > address the existing issues and make DLQ and Retry Topic handling
> more
> > > > efficient and straightforward.
> > > >
> > > > The goals you outlined are clear and, upon implementation, will
> improve
> > > the
> > > > overall functionality of Pulsar. The proposed API changes also seem
> > > > suitable for achieving the desired outcomes.
> > > >
> > > > Looking forward to the progress on this PIP.
> > > >
> > > > Best regards,
> > > > Xiangying
> > > >
> > > > On Fri, Apr 7, 2023 at 1:56 AM Yubiao Feng
> > > > <yubiao.f...@streamnative.io.invalid> wrote:
> > > >
> > > > > Hi community
> > > > >
> > > > > I started a PIP about "Just auto-create no-partitioned DLQ And
> Prevent
> > > > > auto-create a DLQ for a DLQ".
> > > > >
> > > > > PIP link: https://github.com/apache/pulsar/issues/20033
> > > > >
> > > > > ### Motivation
> > > > >
> > > > > #### Just auto-create no-partitioned DLQ/Retry Topic
> > > > > If enabled the config `allowAutoTopicCreation,` Pulsar will
> > > auto-create a
> > > > > topic when the client loads it; After setting config
> > > > > `allowAutoTopicCreationType=partitioned, defaultNumPartitions=2`,
> > > Pulsar
> > > > > will auto-create a partitioned topic(which have two partitions)
> when
> > > the
> > > > > client loads it.
> > > > >
> > > > > After the above, if using the feature [Retry Topic](
> > > > >
> > > > >
> > >
> https://pulsar.apache.org/docs/2.11.x/concepts-messaging/#retry-letter-topic
> > > > > )
> > > > > and [DLQ](
> > > > >
> > >
> https://pulsar.apache.org/docs/2.11.x/concepts-messaging/#dead-letter-topic
> > > > > )
> > > > > enable topic auto-creation, we will get a partitioned DLQ and a
> > > partitioned
> > > > > Retry Topic like this:
> > > > > - `{primary_topic_name}-{sub_name}-DLQ`
> > > > >   -`{primary_topic_name}-{sub_name}-DLQ-partition-0`
> > > > >   -`{primary_topic_name}-{sub_name}-DLQ-partition-1`
> > > > > - `{primary_topic_name}-{sub_name}-RETRY`
> > > > >   -`{primary_topic_name}-{sub_name}-RETRY-partition-0`
> > > > >   -`{primary_topic_name}-{sub_name}-RETRY-partition-1`
> > > > >
> > > > > ----
> > > > >
> > > > > I feel that almost all users will not use the multi-partitioned
> DLQ or
> > > > > multi-partitioned Retry topic because there is a bug that causes
> the
> > > above
> > > > > behavior to be incorrect, but we have yet to receive any issues
> about
> > > it.
> > > > > This bug causes the above behavior to look like this: When the
> > > partitioned
> > > > > DLQ is auto-created for the topic `tp1-partition-0`, Pulsar will
> > > create a
> > > > > partitioned topic meta which has two partitioned but only create a
> > > topic
> > > > > named `{primary_topic_name}-{sub_name}-DLQ,` there is no topic
> named
> > > > > `{primary_topic_name}-{sub_name}-DLQ-partition-x.` Please look at
> this
> > > > > [PR]( https://github.com/apache/pulsar/pull/19841) for a detailed
> bug
> > > > > description.
> > > > >
> > > > > So I want to change the behavior to Just auto-create no-partitioned
> > > > > DLQ/Retry Topic.
> > > > >
> > > > > ----
> > > > >
> > > > > #### Prevent auto-create the DLQ for a DLQ
> > > > > Please look at this [Discussion](
> > > > > https://lists.apache.org/thread/q1m23ckyy10wvtzy65v8bwqwnh7r0gc8)
> for
> > > the
> > > > > detail.
> > > > >
> > > > > ----
> > > > >
> > > > > ### Goal
> > > > >
> > > > > - Just auto-create no-partitioned DLQ/Retry Topic(with the other
> words:
> > > > > prevent auto-create partitioned DLQ)
> > > > > - DLQ/Retry topic should not create for a DLQ/Retry Topic
> > > > >   - roles:
> > > > >     - DLQ will not auto-create for a DLQ
> > > > >     - Retry Topic will not auto-create for a Retry Topic
> > > > >     - DLQ will not auto-create for a Retry Topic
> > > > >     - Retry Topic will not auto-create for a DLQ
> > > > >   - client changes: Clients will not create a DLQ for a DLQ
> > > > >   - broker changes: rejected the request which wants to
> auto-create a
> > > DLQ
> > > > > for a DLQ
> > > > >
> > > > > ----
> > > > >
> > > > > ### API Changes
> > > > >
> > > > > #### CommandSubscribe.java
> > > > > ```java
> > > > > /**
> > > > >   * This is an enumeration value with tree options: "standard",
> "dead
> > > > > letter", "retry letter".
> > > > >   */
> > > > > private String topicPurpose;
> > > > > ```
> > > > >
> > > > > #### Properties of Topic
> > > > > ```properties
> > > > > "purposeOfAutoCreatedTopic": value with tree options: "standard",
> "dead
> > > > > letter", "retry letter"
> > > > > ```
> > > > >
> > > > > Why not use two properties: `isAutoCreated` and `topicPurpose`?
> > > > > Because there is a scenario like this: auto-create a topic, use it
> as
> > > a DLQ
> > > > > after a few days, and not use it as a DLQ after a few days, this
> Topic
> > > will
> > > > > be allowed to have DLQ/Retry Topic. We only mark the topics
> created for
> > > > > DLQ/Retry purposes.
> > > > >
> > > > >
> > > > > Thanks
> > > > > Yubiao Feng
> > > > >
> > >
>

Reply via email to