Hi,
I agree with the KIP, it makes sense to reduce the number of ways the
configs get passed. I agree with Sophie that it doesn't make sense to
rewrite the topology compilation just to delay reading the configs.
The question StreamsConfig vs. Map/Properties is less clear-cut to me.
The immutability argument seems weak - if a parameter of type
Properties / Map is converted into a StreamsConfig copy right in the
various constructors, we'd get the same immutability benefit.
On the other hand, KafkaConsumer, KafkaProducer, AdminClient all take
Map<String, Object> or Properties, and explicitly restrict the
visibility of constructors with ConsumerConfig/ProducerConfig/..., and
KafkaStreams would decide to go a separate route, allowing only the
complex AbstractConfig class instead of the simple data type. This
seems pretty inconsistent for the interfaces of a single open source
project.
Cheers,
Lucas
On Fri, Mar 14, 2025 at 2:43 AM Sophie Blee-Goldman
<sop...@responsive.dev> wrote:
I don't believe it's possible to only pass the configurations into
KafkaStreams, at least not without a huge refactoring of how and when the
topology is compiled. I looked into this for the processor wrapper config
since obviously it's preferable to not require configs be passed in to
the
Topology/StreamsBuilder, and wasn't able to make it work. If it's
possible
at all, it would have significantly complicated the already-complex
topology construction code. I don't think it's worth it.
If we really wanted to only pass configs into one place, I'd say we
should
just require them for the Topology and StreeamsBuilder constructor, and
not
pass configs into KafkaStreams at all. But that would mean a
deprecation/code change affecting every single user out there, which
feels
like unnecessary turmoil.
As for whether to require StreamsConfig vs Map/Properties, I'm fine with
requiring StreamsConfig in theory, but since KafkaStreams allows users to
pass in a plain config map then some users might not instantiate
StreamsConfig at all, and this would force them to do so. Maybe that's
not
such a bad thing though...so yeah, guess I'm fine with just the
StreamsConfig variant :)
On Thu, Mar 13, 2025 at 3:17 PM Bill Bejeck <bbej...@apache.org> wrote:
Thanks for the KIP, this is great improvement.
I'm +1 to all the comments and changes in the KIP thus far.
I also like the proposal from Bruno regarding only passing
configurations
to KafkaStreams.
Regarding your comment about internal configuration propagation, would
setting the visiblitly on the Topology constructor to package private
or
protected solve the issue?
I'm not sure I'm addressing your concern entirely, but if we can
simplify
the code paths for passing configuration, I think it's worth some
tradeoffs
for the gain in simplicity.
As I'm writing this though I'm wondering if this is indeed possible
when
taking the PAPI into consideration. At any rate, I think the KIP can
proceed as is, I just wanted to add my 2cents.
Regards,
Bill
On Mon, Mar 10, 2025 at 11:38 AM Sebastien Viale <
sebastien.vi...@michelin.com> wrote:
Hi,
Thank you both for your remarks.
Sophie:
I have added all your proposals to the rejected alternatives.
BC1:
I agree that we should not create multiple config classes, as
avoiding
that is the main goal of the KIP.
It would be nice to have a single constructor (KafkaStreams) that
accepts
the configuration. However, unless I’m mistaken, this would require
handling config propagation internally to other components like
Topology.
BC2:
StreamsConfig is indeed immutable, and like Bruno, I believe this is
the
safer approach.
Best,
Sébastien
De : Bruno Cadonna <cado...@apache.org>
Date : vendredi, 7 mars 2025 à 18:55
À : dev@kafka.apache.org <dev@kafka.apache.org>
Objet : [EXT] Re: [DISCUSS] KIP-1138: Clean up TopologyConfig and
API for
supplying configs needed by the topology
Warning External sender Do not click on any links or open any
attachments
unless you trust the sender and know the content is safe.
Hi Sébastien,
Thanks for the KIP!
Cleaning up the configs classes is really a good idea!
BC1:
I am in favor of having only StreamsConfig as a config class to avoid
proliferation of config classes. However, I find it a bit ugly that a
Streams user is required to pass the config first to the topology and
then to KafkaStreams. Since we are talking about changing
constructors,
I am wondering if it were possible to pass the configs only to
KafkaStreams.
BC2:
While Sophie advocates to only pass a Map/Properties object into the
constructors, I am advocating to only passing StreamsConfig objects
to
the constructors. The reason is that Map/Properties are mutable and
StreamsConfig is immutable. IMO, it would be safer to pass immutable
configs to the constructors. But maybe there is a good reason to pass
mutable configs that I do not know. Maybe Sophie can clarify.
+1 to adding all considerations discussed in the thread to the
rejected
alternatives.
Best,
Bruno
This email was screened for spam and malicious content but exercise
caution anyway.
On 06.03.25 02:43, Sophie Blee-Goldman wrote:
Thanks for the KIP! The proposal here sounds like the right
direction
to
go
in for me, but I'll be interested to hear what others think.
I'm wondering if we should offer additional StreamsBuilder &
Topology
constructors that accept a plain config map (or Properties)
alongside
the
StreamsConfig constructors. I'd advocate for providing only the
Map/Properties variety except that I'm pretty sure the
StreamsConfig
options are needed for dependency injection and were requested by
users
of
Spring
Also, just to list out some alternatives, we could go in a
different
direction completely by making TopologyConfig a true config in its
own
right, and moving all the topology-specific configs from
StreamsConfig
to
TopologyConfig (ie removing them from StreamsConfig completely)
On the one hand, it might make more sense to keep configs
separated and
group them by where they need to be applied. On the other hand I
wouldn't
want to start proliferating config classes since I think this makes
discovery more difficult and increases the API surface area. So
personally,
I think it's sufficient to just add the check and warning log
described
in
the KIP
We could also deprecate the default constructor for
TopologyStreamsBuilder
to force people to pass configs in. I'm honestly fine either way,
as I
don't really think it's much of a burden to ask users to pass
configs
into
one more place, but since the new check should help prevent users
from
accidentally forgetting to pass the topology-specific configs into
the
Topology/StreamsBuilder, then deprecating the default constructors
seem
like na unnecessary step.
Sébastien -- My only other feedback for you on the KIP would be to
list
these under the Rejected Alternatives section so we know what the
range
of
options are.
Thanks!
-Sophie
On Wed, Feb 26, 2025 at 11:57 PM Sebastien Viale <
sebastien.vi...@michelin.com> wrote:
Hi Everyone,
I would like to start a discussion on KIP-1138: Clean up
TopologyConfig
and API for supplying configs needed by the topology<
https://cwiki.apache.org/confluence/display/KAFKA/KIP-1138%3A+Clean+up+TopologyConfig+and+API+for+supplying+configs+needed+by+the+topology
<
https://cwiki.apache.org/confluence/display/KAFKA/KIP-1138%3A+Clean+up+TopologyConfig+and+API+for+supplying+configs+needed+by+the+topology
This proposal aims to simplify Kafka Streams configuration by
unifying
APIs and ensuring topology-specific configs (e.g.,
topology.optimization,
processor.wrapper.class) are correctly applied to prevent silent
misconfigurations.
Regards,
Sébastien