I've relocated the PIP content from the issue (
https://github.com/apache/pulsar/issues/20197) to a PR (
https://github.com/apache/pulsar/pull/21080) so I could add TOC and also be
inlined with the new process.



On Mon, Aug 28, 2023 at 5:46 PM Asaf Mesika <asaf.mes...@gmail.com> wrote:

> Thanks for taking the time to review the document - *highly appreciated*.
> I'm inlined my comments below.
>
>
> On Mon, Aug 21, 2023 at 12:19 PM Hang Chen <chenh...@apache.org> wrote:
>
>> Hi Asaf,
>>     Thanks for bring up the great proposal.
>>
>> After reading this proposal, I have the following questions.
>> 1. This proposal will introduce a big break change in Pulsar,
>> especially in code perspective. I’m interested in how to support both
>> old and new implementation at the same time step by step?
>>
>> >We will keep the current metric system as is, and add a new layer of
>> metrics using OpenTelemetry Java SDK. All of Pulsar’s metrics will be
>> create also using OpenTelemetry. A feature flag will allow enabling
>> OpenTelemetry metrics (init, recording and exporting). All the features and
>> changes described here will be done only in the OpenTelemetry layer,
>> allowing to keep the old version working until you’re ready to switch using
>> the OTel (OpenTelemetry) implementation. In the far future, once OTel usage
>> has stabilized and became widely adopted we’ll deprecate current metric
>> system and eventually remove it. We will also make sure there is feature
>> flag to turn off current Prometheus based metric system.
>>
>>
> Current metrics code remains as is, untouched.
> I'm adding new code, using OpenTelemetry API and SDK. The code in most
> cases will read the existing variables (like msgsReceived), and in other
> cases will setup its own new objects like Counter, Histogram and *also*
> record values to them.
> You can take a look at the revised PIP as I've added tiny code sample to
> be use as an idea how it will look like. Look here
> <https://github.com/apache/pulsar/blob/6ec0bde4127a54ab8e8bb67fb091c932fa2952a4/pip/pip-264.md#consolidating-to-opentelemetry>
> .
>
>
>
>> 2. We introduced Group and filter logic in the metric system, and I
>> have the following concerns.
>> - We need to add protection logic or pre-validation for the group and
>> filter rules to avoid users mis-configured causes huge performance
>> impaction on Pulsar brokers
>>
>>
> Good call. I've added a note in the PIP, that we will reject any filter
> rules update if the expected number of data points exceed certain
> threshold. I left this as detail to be specified in the sub-PIP.
>
> - We need to support expose all the topic-level metrics when the
>> Pulsar cluster just has thounds of topics
>>
>> I've added a new goal: "- New system should support the maximum
> supported number of topics in current system (i.e. 4k topics) without
> filtering"
>
>
>> - Even though we introduced group and filter for the metrics, we still
>> can’t resolve large number of metrics exposed to Prometheus. Exposing
>> large a mount of data (100MB+) throughput HTTP endpoint in
>> ineffective. We can consider expose those metric data by Pulsar topic
>> and develop a Pulsar to Prometheus connector to write Pulsar metric
>> data to Prometheus in streaming mode instead of batch mode to reduce
>> the performace impaction
>>
>
> As I wrote in my PIP. If you find your self exporting 100MB or more of
> metric data *every* 30 seconds you will suffer from:
> * High cost of TSDB holding that (e.g. Prometheus, Cortex, VictoriaMetrics)
> * Query time out since there is too much data to read
>
> Also, the bottleneck is not transfer time over the wire. It's mostly the
> memory needed by any TSDB to hold it for at least 2 hours before flushing
> it to disk - this it the most expensive of all.
>
> At 100mb response size, filtering and grouping are a must.
>
>
>
>>
>> - Group and filter logic uses regular expressions extensively in
>> rules. Regular expression parsing and matching are CPU and time
>> intensive operations. We have push-down filter to reduce the generated
>> metrics number, but still can’t solve the regular expression matching
>> issues. If the user provide a complex regular expression for group and
>> filter rule, the metric generating thread will be the bottleneck and
>> will block other threads if we use synchronous call.
>>
>>
> I plan to use caching as wrote in the PIP. Roughly (instrument,
> attributes) -> boolean. It's basically as if we are adding one boolean to
> PersistentTopic class - it has so many properties and size added is
> negligible.
>
>
>> - Group and filter rule is a litter complex for users and we need to
>> provide a UI or tool to help user write the correct and effective
>> rules and show the new rules impaction on old rules.
>>
>
> We don't have UI for now in Pulsar. We will make sure pulsar CLI will be
> convenient enough.
>
>
>>
>>
>> Thanks,
>> Hang
>>
>> Matteo Merli <matteo.me...@gmail.com> 于2023年6月15日周四 23:14写道:
>> >
>> > > Proposing a large breaking change (even if it's crucial) is the single
>> > fastest way to motivate your users to migrate to a different platform. I
>> > wish it wasn't the case, but it's the cold reality.
>> >
>> > If you read the proposal, there is no real breaking change. There will
>> be a
>> > switch to choose the existing metrics or the new ones. The dashboards
>> will
>> > be updated and provided.
>> >
>> > At the same time, the best sure way to motivate users to switch or not
>> > adopt a platform is to stick with confusing/inconsistent APIs/Metrics.
>> >
>> >
>> > --
>> > Matteo Merli
>> > <matteo.me...@gmail.com>
>> >
>> >
>> > On Wed, Jun 14, 2023 at 6:10 PM Devin Bost <devin.b...@gmail.com>
>> wrote:
>> >
>> > > > Thanks for the details, Devin. Curios - 'We' stands for which
>> company?
>> > >
>> > > What do you mean? I was quoting Rajan when I said, "we."
>> > >
>> > >
>> > > Devin G. Bost
>> > >
>> > >
>> > > On Wed, Jun 14, 2023 at 10:02 AM Asaf Mesika <asaf.mes...@gmail.com>
>> > > wrote:
>> > >
>> > > > Thanks for the details, Devin. Curios - 'We' stands for which
>> company?
>> > > >
>> > > > Can you take a look at my previous response to see if it answers the
>> > > > concern you raised?
>> > > >
>> > > > Thanks!
>> > > >
>> > > >
>> > > > On Wed, Jun 14, 2023 at 1:49 PM Devin Bost <devin.b...@gmail.com>
>> wrote:
>> > > >
>> > > > > > Hi,
>> > > > > >
>> > > > > > Are we proposing a change to break existing metrics
>> compatibility
>> > > > > > (prometheus)? If that is the case then it's a big red flag as
>> it will
>> > > > be
>> > > > > a
>> > > > > > pain for any company to upgrade Pulsar as monitoring is THE most
>> > > > > important
>> > > > > > part of the system and we don't even want to break
>> compatibility for
>> > > > any
>> > > > > > small things to avoid interruption for users that are using
>> Pulsar
>> > > > > system.
>> > > > > > I think it's always good to enhance a system by maintaining
>> > > > compatibility
>> > > > > > and I would be fine if we can introduce new metrics API without
>> > > causing
>> > > > > ANY
>> > > > > > interruption to existing metrics API. But if we can't maintain
>> > > > > > compatibility then it's a big red flag and not acceptable for
>> the
>> > > > Pulsar
>> > > > > > community.
>> > > > >
>> > > > > Proposing a large breaking change (even if it's crucial) is the
>> single
>> > > > > fastest way to motivate your users to migrate to a different
>> platform.
>> > > I
>> > > > > wish it wasn't the case, but it's the cold reality.
>> > > > >
>> > > > > With that said, I'm a big proponent of Open Telemetry. I did a big
>> > > video
>> > > > a
>> > > > > while back that some of you may remember on the use of Open
>> Tracing
>> > > > (before
>> > > > > it was merged into Open Telemetry). Open Telemetry has gained
>> > > > considerable
>> > > > > momentum in the industry since then.
>> > > > >
>> > > > > I'm also very interested in a solution to the metrics problem.
>> I've run
>> > > > > into the scalability issues with metrics in production, and I've
>> been
>> > > > very
>> > > > > concerned about the metrics bottlenecks around our ability to
>> deliver
>> > > our
>> > > > > promises around supporting large numbers of topics. One of the big
>> > > > > advantages of Pulsar over Kafka is supposed to be that topics are
>> > > cheap,
>> > > > > but as it stands, our current metrics design gets seriously in
>> the way
>> > > of
>> > > > > that. Generally speaking, I'm open to solutions, especially if
>> they
>> > > align
>> > > > > us with a growing industry standard.
>> > > > >
>> > > > > - Devin
>> > > > >
>> > > > >
>> > > > > On Wed, Jun 14, 2023, 3:28 AM Enrico Olivelli <
>> eolive...@gmail.com>
>> > > > wrote:
>> > > > >
>> > > > > > Il Mer 14 Giu 2023, 04:33 Rajan Dhabalia <rdhaba...@apache.org>
>> ha
>> > > > > > scritto:
>> > > > > >
>> > > > > > > Hi,
>> > > > > > >
>> > > > > > > Are we proposing a change to break existing metrics
>> compatibility
>> > > > > > > (prometheus)? If that is the case then it's a big red flag as
>> it
>> > > will
>> > > > > be
>> > > > > > a
>> > > > > > > pain for any company to upgrade Pulsar as monitoring is THE
>> most
>> > > > > > important
>> > > > > > > part of the system and we don't even want to break
>> compatibility
>> > > for
>> > > > > any
>> > > > > > > small things to avoid interruption for users that are using
>> Pulsar
>> > > > > > system.
>> > > > > > > I think it's always good to enhance a system by maintaining
>> > > > > compatibility
>> > > > > > > and I would be fine if we can introduce new metrics API
>> without
>> > > > causing
>> > > > > > ANY
>> > > > > > > interruption to existing metrics API. But if we can't maintain
>> > > > > > > compatibility then it's a big red flag and not acceptable for
>> the
>> > > > > Pulsar
>> > > > > > > community.
>> > > > > > >
>> > > > > >
>> > > > > > I agree.
>> > > > > >
>> > > > > > If it is possible to export data Ina way that is compatible with
>> > > > > Prometheus
>> > > > > > without adding too much overhead then I would support this work.
>> > > > > >
>> > > > > > About renaming the metrics: we can do it only if tue changes for
>> > > users
>> > > > > are
>> > > > > > as trivial as replacing the queries in the grafana dashboard or
>> in
>> > > > > alerting
>> > > > > > systems.
>> > > > > >
>> > > > > > Asaf, do you have prototype? Built over any version of Pulsar?
>> > > > > >
>> > > > > > Also, it would be very useful to start an initiative to collect
>> the
>> > > > list
>> > > > > of
>> > > > > > metrics that people really use in production, especially for
>> > > automated
>> > > > > > alerts.
>> > > > > >
>> > > > > > In my experience you usually care about:
>> > > > > > - in/out traffic (rates, bytes...)
>> > > > > > - number of producer, consumers, topics, subscriptions...
>> > > > > > - backlog
>> > > > > > - jvm metrics
>> > > > > > - function custom metrics
>> > > > > >
>> > > > > >
>> > > > > > Enrico
>> > > > > >
>> > > > > >
>> > > > > >
>> > > > > >
>> > > > > > > Thanks,
>> > > > > > > Rajan
>> > > > > > >
>> > > > > > > On Sun, May 21, 2023 at 9:01 AM Asaf Mesika <
>> asaf.mes...@gmail.com
>> > > >
>> > > > > > wrote:
>> > > > > > >
>> > > > > > > > Thanks for the reply, Enrico.
>> > > > > > > > Completely agree.
>> > > > > > > > This made me realize my TL;DR wasn't talking about export.
>> > > > > > > > I added this to it:
>> > > > > > > >
>> > > > > > > > ---
>> > > > > > > > Pulsar OTel Metrics will support exporting as Prometheus
>> HTTP
>> > > > > endpoint
>> > > > > > > > (`/metrics` but different port) for backward compatibility
>> and
>> > > also
>> > > > > > OLTP,
>> > > > > > > > so you can push the metrics to OTel Collector and from
>> there ship
>> > > > it
>> > > > > to
>> > > > > > > any
>> > > > > > > > destination.
>> > > > > > > > ---
>> > > > > > > >
>> > > > > > > > OTel supports two kinds of exporter: Prometheus (HTTP) and
>> OTLP
>> > > > > (push).
>> > > > > > > > We'll just configure to use them.
>> > > > > > > >
>> > > > > > > >
>> > > > > > > >
>> > > > > > > > On Mon, May 15, 2023 at 10:35 AM Enrico Olivelli <
>> > > > > eolive...@gmail.com>
>> > > > > > > > wrote:
>> > > > > > > >
>> > > > > > > > > Asaf,
>> > > > > > > > > thanks for contributing in this area.
>> > > > > > > > > Metrics are a fundamental feature of Pulsar.
>> > > > > > > > >
>> > > > > > > > > Currently I find it very awkward to maintain metrics, and
>> also
>> > > I
>> > > > > see
>> > > > > > > > > it as a problem to support only Prometheus.
>> > > > > > > > >
>> > > > > > > > > Regarding your proposal, IIRC in the past someone else
>> proposed
>> > > > to
>> > > > > > > > > support other metrics systems and they have been
>> suggested to
>> > > > use a
>> > > > > > > > > sidecar approach,
>> > > > > > > > > that is to add something next to Pulsar services that
>> served
>> > > the
>> > > > > > > > > metrics in the preferred format/way.
>> > > > > > > > > I find that the sidecar approach is too inefficient and I
>> am
>> > > not
>> > > > > > > > > proposing it (but I wanted to add this reference for the
>> > > benefit
>> > > > of
>> > > > > > > > > new people on the list).
>> > > > > > > > >
>> > > > > > > > > I wonder if it would be possible to keep compatibility
>> with the
>> > > > > > > > > current Prometheus based metrics.
>> > > > > > > > > Now Pulsar reached a point in which is is widely used by
>> many
>> > > > > > > > > companies and also with big clusters,
>> > > > > > > > > telling people that they have to rework all the
>> infrastructure
>> > > > > > related
>> > > > > > > > > to metrics because we don't support Prometheus anymore or
>> > > because
>> > > > > we
>> > > > > > > > > changed radically the way we publish metrics
>> > > > > > > > > It is a step that seems too hard from my point of view.
>> > > > > > > > >
>> > > > > > > > > Currently I believe that compatibility is more important
>> than
>> > > > > > > > > versatility, and if we want to introduce new (and far
>> better)
>> > > > > > features
>> > > > > > > > > we must take it into account.
>> > > > > > > > >
>> > > > > > > > > So my point is that I generally support the idea of
>> opening the
>> > > > way
>> > > > > > to
>> > > > > > > > > Open Telemetry, but we must have a way to not force all
>> of our
>> > > > > users
>> > > > > > > > > to throw away their alerting systems, dashboards and
>> know-how
>> > > in
>> > > > > > > > > troubleshooting Pulsar problems in production and dev
>> > > > > > > > >
>> > > > > > > > > Best regards
>> > > > > > > > > Enrico
>> > > > > > > > >
>> > > > > > > > > Il giorno lun 15 mag 2023 alle ore 02:17 Dave Fisher
>> > > > > > > > > <wave4d...@comcast.net> ha scritto:
>> > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > > > > On May 10, 2023, at 1:01 AM, Asaf Mesika <
>> > > > > asaf.mes...@gmail.com>
>> > > > > > > > > wrote:
>> > > > > > > > > > >
>> > > > > > > > > > > On Tue, May 9, 2023 at 11:29 PM Dave Fisher <
>> > > > w...@apache.org>
>> > > > > > > > wrote:
>> > > > > > > > > > >
>> > > > > > > > > > >>
>> > > > > > > > > > >>
>> > > > > > > > > > >>>> On May 8, 2023, at 2:49 AM, Asaf Mesika <
>> > > > > > asaf.mes...@gmail.com>
>> > > > > > > > > wrote:
>> > > > > > > > > > >>>
>> > > > > > > > > > >>> Your feedback made me realized I need to add "TL;DR"
>> > > > section,
>> > > > > > > > which I
>> > > > > > > > > > >> just
>> > > > > > > > > > >>> added.
>> > > > > > > > > > >>>
>> > > > > > > > > > >>> I'm quoting it here. It gives a brief summary of the
>> > > > > proposal,
>> > > > > > > > which
>> > > > > > > > > > >>> requires up to 5 min of read time, helping you get
>> a high
>> > > > > level
>> > > > > > > > > picture
>> > > > > > > > > > >>> before you dive into the
>> background/motivation/solution.
>> > > > > > > > > > >>>
>> > > > > > > > > > >>> ----------------------
>> > > > > > > > > > >>> TL;DR
>> > > > > > > > > > >>>
>> > > > > > > > > > >>> Working with Metrics today as a user or a developer
>> is
>> > > hard
>> > > > > and
>> > > > > > > has
>> > > > > > > > > many
>> > > > > > > > > > >>> severe issues.
>> > > > > > > > > > >>>
>> > > > > > > > > > >>> From the user perspective:
>> > > > > > > > > > >>>
>> > > > > > > > > > >>>  - One of Pulsar strongest feature is "cheap"
>> topics so
>> > > you
>> > > > > can
>> > > > > > > > > easily
>> > > > > > > > > > >>>  have 10k - 100k topics per broker. Once you do
>> that, you
>> > > > > > quickly
>> > > > > > > > > learn
>> > > > > > > > > > >> that
>> > > > > > > > > > >>>  the amount of metrics you export via "/metrics"
>> > > > (Prometheus
>> > > > > > > style
>> > > > > > > > > > >> endpoint)
>> > > > > > > > > > >>>  becomes really big. The cost to store them becomes
>> too
>> > > > high,
>> > > > > > > > queries
>> > > > > > > > > > >>>  time-out or even "/metrics" endpoint it self times
>> out.
>> > > > > > > > > > >>>  The only option Pulsar gives you today is
>> all-or-nothing
>> > > > > > > filtering
>> > > > > > > > > and
>> > > > > > > > > > >>>  very crude aggregation. You switch metrics from
>> topic
>> > > > > > > aggregation
>> > > > > > > > > > >> level to
>> > > > > > > > > > >>>  namespace aggregation level. Also you can turn off
>> > > > producer
>> > > > > > and
>> > > > > > > > > > >> consumer
>> > > > > > > > > > >>>  level metrics. You end up doing it all leaving you
>> > > > "blind",
>> > > > > > > > looking
>> > > > > > > > > at
>> > > > > > > > > > >> the
>> > > > > > > > > > >>>  metrics from a namespace level which is too high
>> level.
>> > > > You
>> > > > > > end
>> > > > > > > up
>> > > > > > > > > > >>>  conjuring all kinds of scripts on top of topic
>> stats
>> > > > > endpoint
>> > > > > > to
>> > > > > > > > > glue
>> > > > > > > > > > >> some
>> > > > > > > > > > >>>  aggregated metrics view for the topics you need.
>> > > > > > > > > > >>>  - Summaries (metric type giving you quantiles like
>> p95)
>> > > > > which
>> > > > > > > are
>> > > > > > > > > used
>> > > > > > > > > > >>>  in Pulsar, can't be aggregated across topics /
>> brokers
>> > > due
>> > > > > its
>> > > > > > > > > inherent
>> > > > > > > > > > >>>  design.
>> > > > > > > > > > >>>  - Plugin authors spend too much time on defining
>> and
>> > > > > exposing
>> > > > > > > > > metrics
>> > > > > > > > > > >> to
>> > > > > > > > > > >>>  Pulsar since the only interface Pulsar offers is
>> writing
>> > > > > your
>> > > > > > > > > metrics
>> > > > > > > > > > >> by
>> > > > > > > > > > >>>  your self as UTF-8 bytes in Prometheus Text Format
>> to
>> > > byte
>> > > > > > > stream
>> > > > > > > > > > >> interface
>> > > > > > > > > > >>>  given to you.
>> > > > > > > > > > >>>  - Pulsar histograms are exported in a way that is
>> not
>> > > > > > conformant
>> > > > > > > > > with
>> > > > > > > > > > >>>  Prometheus, which means you can't get the p95
>> quantile
>> > > on
>> > > > > such
>> > > > > > > > > > >> histograms,
>> > > > > > > > > > >>>  making them very hard to use in day to day life.
>> > > > > > > > > > >>
>> > > > > > > > > > >> What version of DataSketches is used to produce the
>> > > > histogram?
>> > > > > > Is
>> > > > > > > is
>> > > > > > > > > still
>> > > > > > > > > > >> an old Yahoo one, or are we using an updated one from
>> > > Apache
>> > > > > > > > > DataSketches?
>> > > > > > > > > > >>
>> > > > > > > > > > >> Seems like this is a single PR/small PIP for 3.1?
>> > > > > > > > > > >
>> > > > > > > > > > >
>> > > > > > > > > > > Histograms are a list of buckets, each is a counter.
>> > > > > > > > > > > Summary is a collection of values collected over a
>> time
>> > > > window,
>> > > > > > > which
>> > > > > > > > > at
>> > > > > > > > > > > the end you get a calculation of the quantiles of
>> those
>> > > > values:
>> > > > > > > p95,
>> > > > > > > > > p50,
>> > > > > > > > > > > and those are exported from Pulsar.
>> > > > > > > > > > >
>> > > > > > > > > > > Pulsar histogram do not use Data Sketches.
>> > > > > > > > > >
>> > > > > > > > > > Bookkeeper Metrics wraps Yahoo DataSketches last I
>> checked.
>> > > > > > > > > >
>> > > > > > > > > > > They are just counters.
>> > > > > > > > > > > They are not adhere to Prometheus since:
>> > > > > > > > > > > a. The counter is expected to be cumulative, but
>> Pulsar
>> > > > resets
>> > > > > > each
>> > > > > > > > > bucket
>> > > > > > > > > > > counter to 0 every 1 min
>> > > > > > > > > > > b. The bucket upper range is expected to be written
>> as an
>> > > > > > attribute
>> > > > > > > > > "le"
>> > > > > > > > > > > but today it is encoded in the name of the metric
>> itself.
>> > > > > > > > > > >
>> > > > > > > > > > > This is a breaking change, hence hard to mark in any
>> small
>> > > > > > release.
>> > > > > > > > > > > This is why it's part of this PIP since so many
>> things will
>> > > > > > break,
>> > > > > > > > and
>> > > > > > > > > all
>> > > > > > > > > > > of them will break on a separate layer (OTel metrics),
>> > > hence
>> > > > > not
>> > > > > > > > break
>> > > > > > > > > > > anyone without their consent.
>> > > > > > > > > >
>> > > > > > > > > > If this change will break existing Grafana dashboards
>> and
>> > > other
>> > > > > > > > > operational monitoring already in place then it will break
>> > > > > guarantees
>> > > > > > > we
>> > > > > > > > > have made about safely being able to downgrade from a bad
>> > > > upgrade.
>> > > > > > > > > >
>> > > > > > > > > > >
>> > > > > > > > > > >
>> > > > > > > > > > >
>> > > > > > > > > > >>
>> > > > > > > > > > >>
>> > > > > > > > > > >>>  - Too many metrics are rates which also delta reset
>> > > every
>> > > > > > > interval
>> > > > > > > > > you
>> > > > > > > > > > >>>  configure in Pulsar and restart, instead of
>> relying on
>> > > > > > > cumulative
>> > > > > > > > > (ever
>> > > > > > > > > > >>>  growing) counters and let Prometheus use its rate
>> > > > function.
>> > > > > > > > > > >>>  - and many more issues
>> > > > > > > > > > >>>
>> > > > > > > > > > >>> From the developer perspective:
>> > > > > > > > > > >>>
>> > > > > > > > > > >>>  - There are 4 different ways to define and record
>> > > metrics
>> > > > in
>> > > > > > > > Pulsar:
>> > > > > > > > > > >>>  Pulsar own metrics library, Prometheus Java Client,
>> > > > > Bookkeeper
>> > > > > > > > > metrics
>> > > > > > > > > > >>>  library and plain native Java SDK objects
>> (AtomicLong,
>> > > > ...).
>> > > > > > > It's
>> > > > > > > > > very
>> > > > > > > > > > >>>  confusing for the developer and create
>> inconsistencies
>> > > for
>> > > > > the
>> > > > > > > end
>> > > > > > > > > user
>> > > > > > > > > > >>>  (e.g. Summary for example is different in each).
>> > > > > > > > > > >>>  - Patching your metrics into "/metrics" Prometheus
>> > > > endpoint
>> > > > > is
>> > > > > > > > > > >>>  confusing, cumbersome and error prone.
>> > > > > > > > > > >>>  - many more
>> > > > > > > > > > >>>
>> > > > > > > > > > >>> This proposal offers several key changes to solve
>> that:
>> > > > > > > > > > >>>
>> > > > > > > > > > >>>  - Cardinality (supporting 10k-100k topics per
>> broker) is
>> > > > > > solved
>> > > > > > > by
>> > > > > > > > > > >>>  introducing a new aggregation level for metrics
>> called
>> > > > Topic
>> > > > > > > > Metric
>> > > > > > > > > > >> Group.
>> > > > > > > > > > >>>  Using configuration, you specify for each topic its
>> > > group
>> > > > > > (using
>> > > > > > > > > > >>>  wildcard/regex). This allows you to "zoom" out to
>> a more
>> > > > > > > detailed
>> > > > > > > > > > >>>  granularity level like groups instead of
>> namespaces,
>> > > which
>> > > > > you
>> > > > > > > > > control
>> > > > > > > > > > >> how
>> > > > > > > > > > >>>  many groups you'll have hence solving the
>> cardinality
>> > > > issue,
>> > > > > > > > without
>> > > > > > > > > > >>>  sacrificing level of detail too much.
>> > > > > > > > > > >>>  - Fine-grained filtering mechanism, dynamic.
>> You'll have
>> > > > > > > > rule-based
>> > > > > > > > > > >>>  dynamic configuration, allowing you to specify per
>> > > > > > > > > > >> namespace/topic/group
>> > > > > > > > > > >>>  which metrics you'd like to keep/drop. Rules
>> allows you
>> > > to
>> > > > > set
>> > > > > > > the
>> > > > > > > > > > >> default
>> > > > > > > > > > >>>  to have small amount of metrics in group and
>> namespace
>> > > > level
>> > > > > > > only
>> > > > > > > > > and
>> > > > > > > > > > >> drop
>> > > > > > > > > > >>>  the rest. When needed, you can add an override
>> rule to
>> > > > > "open"
>> > > > > > > up a
>> > > > > > > > > > >> certain
>> > > > > > > > > > >>>  group to have more metrics in higher granularity
>> (topic
>> > > or
>> > > > > > even
>> > > > > > > > > > >>>  consumer/producer level). Since it's dynamic you
>> "open"
>> > > > > such a
>> > > > > > > > group
>> > > > > > > > > > >> when
>> > > > > > > > > > >>>  you see it's misbehaving, see it in topic level,
>> and
>> > > when
>> > > > > all
>> > > > > > > > > > >> resolved, you
>> > > > > > > > > > >>>  can "close" it. A bit similar experience to logging
>> > > levels
>> > > > > in
>> > > > > > > > Log4j
>> > > > > > > > > or
>> > > > > > > > > > >>>  Logback, that you default and override per
>> > > class/package.
>> > > > > > > > > > >>>
>> > > > > > > > > > >>> Aggregation and Filtering combined solves the
>> cardinality
>> > > > > > without
>> > > > > > > > > > >>> sacrificing the level of detail when needed and most
>> > > > > > importantly,
>> > > > > > > > you
>> > > > > > > > > > >>> determine which topic/group/namespace it happens on.
>> > > > > > > > > > >>>
>> > > > > > > > > > >>> Since this change is so invasive, it requires a
>> single
>> > > > > metrics
>> > > > > > > > > library to
>> > > > > > > > > > >>> implement all of it on top of; Hence the third big
>> change
>> > > > > point
>> > > > > > > is
>> > > > > > > > > > >>> consolidating all four ways to define and record
>> metrics
>> > > > to a
>> > > > > > > > single
>> > > > > > > > > > >> one, a
>> > > > > > > > > > >>> new one: OpenTelemtry Metrics (Java SDK, and also
>> Python
>> > > > and
>> > > > > Go
>> > > > > > > for
>> > > > > > > > > the
>> > > > > > > > > > >>> Pulsar Function runners).
>> > > > > > > > > > >>> Introducing OpenTelemetry (OTel) solves also the
>> biggest
>> > > > pain
>> > > > > > > point
>> > > > > > > > > from
>> > > > > > > > > > >>> the developer perspective, since it's a superb
>> metrics
>> > > > > library
>> > > > > > > > > offering
>> > > > > > > > > > >>> everything you need, and there is going to be a
>> single
>> > > way
>> > > > -
>> > > > > > only
>> > > > > > > > it.
>> > > > > > > > > > >> Also,
>> > > > > > > > > > >>> it solves the robustness for Plugin author which
>> will use
>> > > > > > > > > OpenTelemetry.
>> > > > > > > > > > >> It
>> > > > > > > > > > >>> so happens that it also solves all the numerous
>> problems
>> > > > > > > described
>> > > > > > > > > in the
>> > > > > > > > > > >>> doc itself.
>> > > > > > > > > > >>>
>> > > > > > > > > > >>> The solution will be introduced as another layer
>> with
>> > > > feature
>> > > > > > > > > toggles, so
>> > > > > > > > > > >>> you can work with existing system, and/or OTel,
>> until
>> > > > > gradually
>> > > > > > > > > > >> deprecating
>> > > > > > > > > > >>> existing system.
>> > > > > > > > > > >>>
>> > > > > > > > > > >>> It's a big breaking change for Pulsar users on many
>> > > fronts:
>> > > > > > > names,
>> > > > > > > > > > >>> semantics, configuration. Read at the end of this
>> doc to
>> > > > > learn
>> > > > > > > > > exactly
>> > > > > > > > > > >> what
>> > > > > > > > > > >>> will change for the user (in high level).
>> > > > > > > > > > >>>
>> > > > > > > > > > >>> In my opinion, it will make Pulsar user experience
>> so
>> > > much
>> > > > > > > better,
>> > > > > > > > > they
>> > > > > > > > > > >>> will want to migrate to it, despite the breaking
>> change.
>> > > > > > > > > > >>>
>> > > > > > > > > > >>> This was a very short summary. You are most
>> welcomed to
>> > > > read
>> > > > > > the
>> > > > > > > > full
>> > > > > > > > > > >>> design document below and express feedback, so we
>> can
>> > > make
>> > > > it
>> > > > > > > > better.
>> > > > > > > > > > >>>
>> > > > > > > > > > >>> On Sun, May 7, 2023 at 7:52 PM Asaf Mesika <
>> > > > > > > asaf.mes...@gmail.com>
>> > > > > > > > > > >> wrote:
>> > > > > > > > > > >>>
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>> On Sun, May 7, 2023 at 4:23 PM Yunze Xu
>> > > > > > > > > <y...@streamnative.io.invalid>
>> > > > > > > > > > >>>> wrote:
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>>> I'm excited to learn much more about metrics when
>> I
>> > > > started
>> > > > > > > > reading
>> > > > > > > > > > >>>>> this proposal. But I became more and more
>> frustrated
>> > > > when I
>> > > > > > > found
>> > > > > > > > > > >>>>> there is still too much content left even if I've
>> > > already
>> > > > > > spent
>> > > > > > > > > much
>> > > > > > > > > > >>>>> time reading this proposal. I'm wondering how
>> much time
>> > > > did
>> > > > > > you
>> > > > > > > > > expect
>> > > > > > > > > > >>>>> reviewers to read through this proposal? I just
>> > > recalled
>> > > > > the
>> > > > > > > > > > >>>>> discussion you started before [1]. Did you expect
>> each
>> > > > PMC
>> > > > > > > member
>> > > > > > > > > that
>> > > > > > > > > > >>>>> gives his/her +1 to read only parts of this
>> proposal?
>> > > > > > > > > > >>>>>
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>> I estimated around 2 hours needed for a reviewer.
>> > > > > > > > > > >>>> I hate it being so long, but I simply couldn't
>> find a
>> > > way
>> > > > to
>> > > > > > > > > downsize it
>> > > > > > > > > > >>>> more. Furthermore, I consulted with my colleagues
>> > > > including
>> > > > > > > > Matteo,
>> > > > > > > > > but
>> > > > > > > > > > >> we
>> > > > > > > > > > >>>> couldn't see a way to scope it down.
>> > > > > > > > > > >>>> Why? Because once you begin this journey, you need
>> to
>> > > know
>> > > > > how
>> > > > > > > > it's
>> > > > > > > > > > >> going
>> > > > > > > > > > >>>> to end.
>> > > > > > > > > > >>>> What I ended up doing, is writing all the crucial
>> > > details
>> > > > > for
>> > > > > > > > > review in
>> > > > > > > > > > >>>> the High Level Design section.
>> > > > > > > > > > >>>> It's still a big, hefty section, but I don't think
>> I can
>> > > > > step
>> > > > > > > out
>> > > > > > > > > or let
>> > > > > > > > > > >>>> anyone else change Pulsar so invasively without
>> the full
>> > > > > > extent
>> > > > > > > of
>> > > > > > > > > the
>> > > > > > > > > > >>>> change.
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>> I don't think it's wise to read parts.
>> > > > > > > > > > >>>> I did my very best effort to minimize it, but the
>> scope
>> > > is
>> > > > > > > simply
>> > > > > > > > > big.
>> > > > > > > > > > >>>> Open for suggestions, but it requires reading all
>> the
>> > > PIP
>> > > > :)
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>> Thanks a lot Yunze for dedicating any time to it.
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>>>
>> > > > > > > > > > >>>>> Let's talk back to the proposal, for now, what I
>> mainly
>> > > > > > learned
>> > > > > > > > and
>> > > > > > > > > > >>>>> are concerned about mostly are:
>> > > > > > > > > > >>>>> 1. Pulsar has many ways to expose metrics. It's
>> not
>> > > > unified
>> > > > > > and
>> > > > > > > > > > >> confusing.
>> > > > > > > > > > >>>>> 2. The current metrics system cannot support a
>> large
>> > > > amount
>> > > > > > of
>> > > > > > > > > topics.
>> > > > > > > > > > >>>>> 3. It's hard for plugin authors to integrate
>> metrics.
>> > > > (For
>> > > > > > > > example,
>> > > > > > > > > > >>>>> KoP [2] integrates metrics by implementing the
>> > > > > > > > > > >>>>> PrometheusRawMetricsProvider interface and it
>> indeed
>> > > > needs
>> > > > > > much
>> > > > > > > > > work)
>> > > > > > > > > > >>>>>
>> > > > > > > > > > >>>>> Regarding the 1st issue, this proposal chooses
>> > > > > OpenTelemetry
>> > > > > > > > > (OTel).
>> > > > > > > > > > >>>>>
>> > > > > > > > > > >>>>> Regarding the 2nd issue, I scrolled to the "Why
>> > > > > > OpenTelemetry?"
>> > > > > > > > > > >>>>> section. It's still frustrating to see no answer.
>> > > > > > Eventually, I
>> > > > > > > > > found
>> > > > > > > > > > >>>>>
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>> OpenTelemetry isn't the solution for large amount
>> of
>> > > > topic.
>> > > > > > > > > > >>>> The solution is described at
>> > > > > > > > > > >>>> "Aggregate and Filtering to solve cardinality
>> issues"
>> > > > > section.
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>>> the explanation in the "What we need to fix in
>> > > > > OpenTelemetry
>> > > > > > -
>> > > > > > > > > > >>>>> Performance" section. It seems that we still need
>> some
>> > > > > > > > > enhancements in
>> > > > > > > > > > >>>>> OTel. In other words, currently OTel is not ready
>> for
>> > > > > > resolving
>> > > > > > > > all
>> > > > > > > > > > >>>>> these issues listed in the proposal but we
>> believe it
>> > > > will.
>> > > > > > > > > > >>>>>
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>> Let me rephrase "believe" --> we work together
>> with the
>> > > > > > > > maintainers
>> > > > > > > > > to
>> > > > > > > > > > >> do
>> > > > > > > > > > >>>> it, yes.
>> > > > > > > > > > >>>> I am open for any other suggestion.
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>>>
>> > > > > > > > > > >>>>> As for the 3rd issue, from the "Integrating with
>> Pulsar
>> > > > > > > Plugins"
>> > > > > > > > > > >>>>> section, the plugin authors still need to
>> implement the
>> > > > new
>> > > > > > > OTel
>> > > > > > > > > > >>>>> interfaces. Is it much easier than using the
>> existing
>> > > > ways
>> > > > > to
>> > > > > > > > > expose
>> > > > > > > > > > >>>>> metrics? Could metrics still be easily integrated
>> with
>> > > > > > Grafana?
>> > > > > > > > > > >>>>>
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>> Yes, it's way easier.
>> > > > > > > > > > >>>> Basically you have a full fledged metrics library
>> > > objects:
>> > > > > > > Meter,
>> > > > > > > > > Gauge,
>> > > > > > > > > > >>>> Histogram, Counter.
>> > > > > > > > > > >>>> No more Raw Metrics Provider, writing UTF-8 bytes
>> in
>> > > > > > Prometheus
>> > > > > > > > > format.
>> > > > > > > > > > >>>> You get namespacing for free with Meter name and
>> > > version.
>> > > > > > > > > > >>>> It's way better than current solution and any other
>> > > > library.
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>>>
>> > > > > > > > > > >>>>> That's all I am concerned about at the moment. I
>> > > > > understand,
>> > > > > > > and
>> > > > > > > > > > >>>>> appreciate that you've spent much time studying
>> and
>> > > > > > explaining
>> > > > > > > > all
>> > > > > > > > > > >>>>> these things. But, this proposal is still too
>> huge.
>> > > > > > > > > > >>>>>
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>> I appreciate your effort a lot!
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>>>>
>> > > > > > > > > > >>>>> [1]
>> > > > > > > > >
>> > > https://lists.apache.org/thread/04jxqskcwwzdyfghkv4zstxxmzn154kf
>> > > > > > > > > > >>>>> [2]
>> > > > > > > > > > >>>>>
>> > > > > > > > > > >>
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> https://github.com/streamnative/kop/blob/master/kafka-impl/src/main/java/io/streamnative/pulsar/handlers/kop/stats/PrometheusMetricsProvider.java
>> > > > > > > > > > >>>>>
>> > > > > > > > > > >>>>> Thanks,
>> > > > > > > > > > >>>>> Yunze
>> > > > > > > > > > >>>>>
>> > > > > > > > > > >>>>> On Sun, May 7, 2023 at 5:53 PM Asaf Mesika <
>> > > > > > > > asaf.mes...@gmail.com>
>> > > > > > > > > > >> wrote:
>> > > > > > > > > > >>>>>>
>> > > > > > > > > > >>>>>> I'm very appreciative for feedback from multiple
>> > > pulsar
>> > > > > > users
>> > > > > > > > and
>> > > > > > > > > devs
>> > > > > > > > > > >>>>> on
>> > > > > > > > > > >>>>>> this PIP, since it has dramatic changes
>> suggested and
>> > > > > quite
>> > > > > > > > > extensive
>> > > > > > > > > > >>>>>> positive change for the users.
>> > > > > > > > > > >>>>>>
>> > > > > > > > > > >>>>>>
>> > > > > > > > > > >>>>>> On Thu, Apr 27, 2023 at 7:32 PM Asaf Mesika <
>> > > > > > > > > asaf.mes...@gmail.com>
>> > > > > > > > > > >>>>> wrote:
>> > > > > > > > > > >>>>>>
>> > > > > > > > > > >>>>>>> Hi all,
>> > > > > > > > > > >>>>>>>
>> > > > > > > > > > >>>>>>> I'm very excited to release a PIP I've been
>> working
>> > > on
>> > > > in
>> > > > > > the
>> > > > > > > > > past 11
>> > > > > > > > > > >>>>>>> months, which I think will be immensely
>> valuable to
>> > > > > Pulsar,
>> > > > > > > > > which I
>> > > > > > > > > > >>>>> like so
>> > > > > > > > > > >>>>>>> much.
>> > > > > > > > > > >>>>>>>
>> > > > > > > > > > >>>>>>> PIP:
>> https://github.com/apache/pulsar/issues/20197
>> > > > > > > > > > >>>>>>>
>> > > > > > > > > > >>>>>>> I'm quoting here the preface:
>> > > > > > > > > > >>>>>>>
>> > > > > > > > > > >>>>>>> === QUOTE START ===
>> > > > > > > > > > >>>>>>>
>> > > > > > > > > > >>>>>>> Roughly 11 months ago, I started working on
>> solving
>> > > the
>> > > > > > > biggest
>> > > > > > > > > issue
>> > > > > > > > > > >>>>> with
>> > > > > > > > > > >>>>>>> Pulsar metrics: the lack of ability to monitor a
>> > > pulsar
>> > > > > > > broker
>> > > > > > > > > with a
>> > > > > > > > > > >>>>> large
>> > > > > > > > > > >>>>>>> topic count: 10k, 100k, and future support of
>> 1M.
>> > > This
>> > > > > > > started
>> > > > > > > > by
>> > > > > > > > > > >>>>> mapping
>> > > > > > > > > > >>>>>>> the existing functionality and then enumerating
>> all
>> > > the
>> > > > > > > > problems
>> > > > > > > > > I
>> > > > > > > > > > >>>>> saw (all
>> > > > > > > > > > >>>>>>> documented in this doc
>> > > > > > > > > > >>>>>>> <
>> > > > > > > > > > >>>>>
>> > > > > > > > > > >>
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> https://docs.google.com/document/d/1vke4w1nt7EEgOvEerPEUS-Al3aqLTm9cl2wTBkKNXUA/edit?usp=sharing
>> > > > > > > > > >
>> > > > > > > > > > I thought we were going to stop using Google docs for
>> PIPs.
>> > > > > > > > > >
>> > > > > > > > > > >>>>>>
>> > > > > > > > > > >>>>>>> ).
>> > > > > > > > > > >>>>>>>
>> > > > > > > > > > >>>>>>> This PIP is a parent PIP. It aims to gradually
>> solve
>> > > > > (using
>> > > > > > > > > sub-PIPs)
>> > > > > > > > > > >>>>> all
>> > > > > > > > > > >>>>>>> the current metric system's problems and
>> provide the
>> > > > > > ability
>> > > > > > > to
>> > > > > > > > > > >>>>> monitor a
>> > > > > > > > > > >>>>>>> broker with a large topic count, which is
>> currently
>> > > > > > lacking.
>> > > > > > > > As a
>> > > > > > > > > > >>>>> parent
>> > > > > > > > > > >>>>>>> PIP, it will describe each problem and its
>> solution
>> > > at
>> > > > a
>> > > > > > high
>> > > > > > > > > level,
>> > > > > > > > > > >>>>>>> leaving fine-grained details to the sub-PIPs.
>> The
>> > > > parent
>> > > > > > PIP
>> > > > > > > > > ensures
>> > > > > > > > > > >>>>> all
>> > > > > > > > > > >>>>>>> solutions align and does not contradict each
>> other.
>> > > > > > > > > > >>>>>>>
>> > > > > > > > > > >>>>>>> The basic building block to solve the monitoring
>> > > > ability
>> > > > > of
>> > > > > > > > large
>> > > > > > > > > > >>>>> topic
>> > > > > > > > > > >>>>>>> count is aggregating internally (to topic
>> groups) and
>> > > > > > adding
>> > > > > > > > > > >>>>> fine-grained
>> > > > > > > > > > >>>>>>> filtering. We could have shoe-horned it into the
>> > > > existing
>> > > > > > > > metric
>> > > > > > > > > > >>>>> system,
>> > > > > > > > > > >>>>>>> but we thought adding that to a system already
>> > > > ingrained
>> > > > > > with
>> > > > > > > > > many
>> > > > > > > > > > >>>>> problems
>> > > > > > > > > > >>>>>>> would be wrong and hard to do gradually, as so
>> many
>> > > > > things
>> > > > > > > will
>> > > > > > > > > > >>>>> break. This
>> > > > > > > > > > >>>>>>> is why the second-biggest design decision
>> presented
>> > > > here
>> > > > > is
>> > > > > > > > > > >>>>> consolidating
>> > > > > > > > > > >>>>>>> all existing metric libraries into a single one
>> -
>> > > > > > > OpenTelemetry
>> > > > > > > > > > >>>>>>> <https://opentelemetry.io/>. The parent PIP
>> will
>> > > > explain
>> > > > > > why
>> > > > > > > > > > >>>>>>> OpenTelemetry was chosen out of existing
>> solutions
>> > > and
>> > > > > why
>> > > > > > it
>> > > > > > > > far
>> > > > > > > > > > >>>>> exceeds
>> > > > > > > > > > >>>>>>> all other options. I’ve been working closely
>> with the
>> > > > > > > > > OpenTelemetry
>> > > > > > > > > > >>>>>>> community in the past eight months:
>> brain-storming
>> > > this
>> > > > > > > > > integration,
>> > > > > > > > > > >>>>> and
>> > > > > > > > > > >>>>>>> raising issues, in an effort to remove serious
>> > > blockers
>> > > > > to
>> > > > > > > make
>> > > > > > > > > this
>> > > > > > > > > > >>>>>>> migration successful.
>> > > > > > > > > > >>>>>>>
>> > > > > > > > > > >>>>>>> I made every effort to summarize this document
>> so
>> > > that
>> > > > it
>> > > > > > can
>> > > > > > > > be
>> > > > > > > > > > >>>>> concise
>> > > > > > > > > > >>>>>>> yet clear. I understand it is an effort to read
>> it
>> > > and,
>> > > > > > more
>> > > > > > > > so,
>> > > > > > > > > > >>>>> provide
>> > > > > > > > > > >>>>>>> meaningful feedback on such a large document;
>> hence
>> > > I’m
>> > > > > > very
>> > > > > > > > > grateful
>> > > > > > > > > > >>>>> for
>> > > > > > > > > > >>>>>>> each individual who does so.
>> > > > > > > > > > >>>>>>>
>> > > > > > > > > > >>>>>>> I think this design will help improve the user
>> > > > experience
>> > > > > > > > > immensely,
>> > > > > > > > > > >>>>> so it
>> > > > > > > > > > >>>>>>> is worth the time spent reading it.
>> > > > > > > > > > >>>>>>>
>> > > > > > > > > > >>>>>>>
>> > > > > > > > > > >>>>>>> === QUOTE END ===
>> > > > > > > > > > >>>>>>>
>> > > > > > > > > > >>>>>>>
>> > > > > > > > > > >>>>>>> Thanks!
>> > > > > > > > > > >>>>>>>
>> > > > > > > > > > >>>>>>> Asaf Mesika
>> > > > > > > > > > >>>>>>>
>> > > > > > > > > > >>>>>
>> > > > > > > > > > >>>>
>> > > > > > > > > > >>
>> > > > > > > > > > >>
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>>
>

Reply via email to