Sorry for dropping the ball on this one.

The plan sounds good to me.


-Matthias

On 4/23/26 1:57 PM, Siddhartha Devineni wrote:
Hi Chia-Ping, Kirk and Matthias,

@Chia-Ping: You were right - after investigating, Time doesn't need to be
public.

@Kirk: You are right - the OAuth examples are instantiated via reflection,
not direct user code.

@Matthias: Good points. I investigated whether Metrics can be changed to
not expose Time.

Findings:

- new Metrics() - users call this (internally uses Time.SYSTEM)
- new Metrics(Time time) and other variants - only called by internal Kafka
code (KafkaProducer, KafkaAdminClient, etc) and tests

Proposed approach:

- Withdraw KIP-1311 (Make Time public)
- Create JIRA: "Deprecate Time-accepting constructors"
- Deprecate Time constructors in both KafkaStreams and Metrics:
      - KafkaStreams(Topology, Properties, Time)
      - KafkaStreams(Topology, StreamsConfig, Time)
      - KafkaStreams(Topology, Properties, KafkaClientSupplier, Time)
      - Metrics(Time)
      - Metrics(MetricConfig, Time)
      - Metrics(MetricConfig, List<MetricsReporter>, Time)
      - (and other Metrics variants accepting Time)
- In version 5.0, make these constructors package-private
- Internal Kafka code continues using them

Result: Time remains internal.

Does this approach work? If so, I'll withdraw KIP-1311 and create the JIRA.

Thank you,
Siddhartha

On Tue, Apr 21, 2026 at 5:22 AM Matthias J. Sax <[email protected]> wrote:

Thanks for the KIP. I am not sure if I understand why `KafkaStreamsMock`
would be anything public?

Also, why would we put it into some new `...test...` package? If we
change the package, we need to have `protected` access, which is already
"semi-public"...

If we want to keep `Time` internal, we would eventually make the
constructors that are marked deprecated, package-private, what allows us
to add `org.apache.kafka.streams.KafkaStreamsMock` (same package name,
but int `test/` module) to still use these constructors, and the
corresponding unit test would use the new mock-factory instead of
calling `new`?

For this case, the KIP does not need to mention anything about
`KafkaStreamsMock` as it's an helper in our `test/` module only, but not
public API. -- If we want, we can still mention this plan on the KIP,
but atm the KIP is written in a way as if `KafkaStreamsMock` would
become public API, but to my understanding it should be an impl/testing
details only?

Or did I misunderstand something?


Also wondering, if we could also change `Metrics` in a way, that we
would not need to make `Time` public to begin with?



-Matthias

On 4/20/26 4:53 PM, Kirk True wrote:
Hi Siddhartha,

The OAuth examples use Time in their constructors for unit tests.
They're not intended to be instantiated by any user code since they're in
an internals package.

Thanks,
Kirk

On Wed, Apr 15, 2026, at 8:52 AM, Siddhartha Devineni wrote:
Hi Chia-Ping,

Sorry that i didn't mention the following examples in the KIP earlier.
Now, I have updated the KIP with the following public packages examples,
where "Time" is exposed in the public constructors:

// couple of examples from multiple
"org.apache.kafka.common.metrics.Metrics.java" constructors
public Metrics(Time time) {}
public Metrics(MetricConfig defaultConfig, Time time) {}

// in the public package "org.apache.kafka.common.security.oauthbearer"
public JwtBearerJwtRetriever(Time time) {}
public ClientCredentialsJwtRetriever(Time time) {}

Now, it should be clear.
Thanks for your time.

Best regards,
Siddhartha

On Tue, Apr 14, 2026 at 11:14 AM Chia-Ping Tsai <[email protected]>
wrote:

hi Siddhartha

Thanks for this KIP.

What is the exact benefit of exposing Time as a public API? Since this
KIP
proposes deprecating KafkaStreams(Topology, Properties, Time), it seems
there are no public interfaces relying on it anymore.

Thus, it should be fine to just keep Time as an internal API, right?

Best,
Chia-Ping


Siddhartha Devineni <[email protected]> 於 2026年4月7日週二
下午2:19寫道:

Apologies, as I forgot to add the link to the KIP:



https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=406623925


On Tue, Apr 7, 2026 at 9:13 AM Siddhartha Devineni <
[email protected]> wrote:

Hello everyone,

I would like to start a discussion on [DISCUSS] KIP-1311: Make
Time/Timer
public API.

Following KIP-1247 (Make Bytes part of public API), the Time
interface
and
Timer class are the next candidates from
"org.apache.kafka.common.utils"
to
be made officially public. Time is currently exposed through public
APIs
(e.g., in clients, KafkaStreams constructors, etc) but not officially
designated as a public API.

An earlier version of this KIP explored splitting Time into focused
interfaces (Clock, MonotonicClock, etc.), but this would require
rewriting
thousands of method signatures across the Kafka codebase. The simpler
approach of making Time public as-is seems more appropriate to avoid
breaking changes.

Looking forward to your feedback.

Thank you,
Siddhartha









Reply via email to