Hi Sebastien,

having both Map/Properties sounds good to me.

In the example in under `New way to pass topology-specific config:`,
you still seem to use the `StreamConfig` constructor. Could you update
the example as well?

Cheers,
Lucas

On Fri, May 23, 2025 at 3:32 PM Sebastien Viale
<sebastien.vi...@michelin.com> wrote:
>
> Hi all,
>
> I’d like to reopen the discussion (I’ve been really busy over the past two 
> months)
>
> I’ve updated the KIP to include two constructors: one accepting a Map and one 
> accepting Properties.
>
> Does that look ok for everyone ?
>
> Thanks
>
> Sébastien
>
>
> De : Sebastien Viale <sebastien.vi...@michelin.com>
> Date : jeudi, 3 avril 2025 à 14:11
> À : dev <dev@kafka.apache.org>
> Objet : Re: [DISCUSS] KIP-1138: Clean up TopologyConfig and API for supplying 
> configs needed by the topology
> Thanks, everyone, and thanks, Sophie, for this great summary.
> Indeed, the KafkaStreams constructor uses a Properties object, so it might be 
> more concise to use it.
> Even if it is overkill, some existing applications may already use a 
> Properties, while others use a Map. Personally, I think it is reasonable to 
> propose both constructors. However, I wouldn’t be upset if we kept only one 
> of them.
> I will wait for final thoughts before updating the KIP with the new 
> constructors.
> Cheers !
>
> Sébastien
>
> De : Sophie Blee-Goldman <sop...@responsive.dev>
> Date : jeudi, 3 avril 2025 à 11:33
> À : 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.
>
> Sounds like we are in agreement and can move forward with this KIP.
>
> To sum, instead of having the new StreamsBuilder and Topology constructors
> take a StreamsConfig parameter, they should take a Map or Properties
> instead.
>
> Between the two of those I don't personally have much of a preference, and
> some clients (like KafkaConsumer) even seem to offer both a Map and a
> Properties version of the constructor. Imho this is a bit of an overkill
> and choosing one or the other should be fine for us. I'll note that the the
> KafkaStreams constructor uses Properties so perhaps that's the appropriate
> choice here (even if I personally like the plain Map option slightly better)
>
> Any final thoughts?
> This email was screened for spam and malicious content but exercise caution 
> anyway.
> This email was screened for spam and malicious content but exercise caution 
> anyway.
>
>
>
>
>
> On Thu, Mar 27, 2025 at 9:17 AM Bill Bejeck <bbej...@gmail.com> wrote:
>
> > Hi All,
> >
> > I also agree with the having consistency with the other clients, so I'm
> > also a +1 for using Properties/Map.
> >
> > Thanks,
> > Bill
> >
> > On Thu, Mar 27, 2025 at 7:28 AM Bruno Cadonna <cado...@apache.org> wrote:
> >
> > > Hi,
> > >
> > > I proposed to use constructors with StreamsConfig because I wanted a
> > > public API that says to the users: "The config you pass to Streams will
> > > not be modified." That the first call in a constructor is a
> > > transformation from Properties/Map to StreamsConfig a user might or
> > > might not know.
> > >
> > > I looked a bit around and found KIP-245[1] that deprecated KafkaStreams
> > > constructors that take a StreamsConfig. The main motivation was that
> > > those constructors add boilerplate because you need to construct an
> > > additional object. Fair enough!
> > >
> > > Apparently, we also allow to modify the config in constructors[2].
> > >
> > > So the immutability property is not even possible without making larger
> > > changes.
> > >
> > > I agree that we should keep it consistent with the other clients and I
> > > also see the simplicity argument. So I am fine with just using
> > > Properties/Map.
> > >
> > > Would be interesting to understand what the problem with the dependency
> > > injection is. In the end a StreamsConfig is constructed from a Map.
> > >
> > >
> > > Best,
> > > Bruno
> > >
> > >
> > > [1]
> > >
> > >
> > https://cwiki.apache.org/confluence/display/KAFKA/KIP-245%3A+Use+Properties+instead+of+StreamsConfig+in+KafkaStreams+constructor<https://cwiki.apache.org/confluence/display/KAFKA/KIP-245%3A+Use+Properties+instead+of+StreamsConfig+in+KafkaStreams+constructor><https://cwiki.apache.org/confluence/display/KAFKA/KIP-245%3A+Use+Properties+instead+of+StreamsConfig+in+KafkaStreams+constructor<https://cwiki.apache.org/confluence/display/KAFKA/KIP-245%3A+Use+Properties+instead+of+StreamsConfig+in+KafkaStreams+constructor>>
> > > [2]
> > >
> > >
> > https://github.com/apache/kafka/blob/b9d5597b445741330bf561b096c25e28224988eb/clients/src/main/java/org/apache/kafka/clients/consumer/KafkaConsumer.java#L600<https://github.com/apache/kafka/blob/b9d5597b445741330bf561b096c25e28224988eb/clients/src/main/java/org/apache/kafka/clients/consumer/KafkaConsumer.java#L600><https://github.com/apache/kafka/blob/b9d5597b445741330bf561b096c25e28224988eb/clients/src/main/java/org/apache/kafka/clients/consumer/KafkaConsumer.java#L600<https://github.com/apache/kafka/blob/b9d5597b445741330bf561b096c25e28224988eb/clients/src/main/java/org/apache/kafka/clients/consumer/KafkaConsumer.java#L600>>
> > >
> > > On 26.03.25 22:33, Sophie Blee-Goldman wrote:
> > > > I think Lucas makes a good point. If we want to maintain consistency
> > with
> > > > the currents state and intended direction of the clients w.r.t config
> > > > classes, we should definitely (and perhaps only) offer the
> > Map/Properties
> > > > version of the APIs
> > > >
> > > > I even submitted a KIP a while back to open up the visibility of one of
> > > the
> > > > ProducerConfig constructors, just to bring it in line with the other
> > > > config classes (and to help shut off excessive logging), and it was
> > > pretty
> > > > much stopped dead by core/clients people who didn't like the current
> > > > openness of these config classes and wanted to move in the opposite
> > > > direction rather than make anything more visible (Even if just to bring
> > > one
> > > > of them to parity with the other classes)
> > > >
> > > > I think this is a pretty good argument for at the very least offering
> > the
> > > > plain Map/Properties version, and perhaps only offering that. IIRC the
> > > only
> > > > reason we added the StreamsConfig version of the KafkaStreams
> > > constructors
> > > > was to enable dependency injection for spring kafka users. I have to
> > > wonder
> > > > if there is a way to fix this in spring kafka to allow Map/Properties
> > > based
> > > > configuration, rather than forcing KafkaStreams to allow StreamsConfig
> > > > constructors
> > > >
> > > > So as of this time I'm still personally in favor of having only the
> > > > Map/Properties option, though that still leaves open the question of
> > > which
> > > > one (I notice that KAfkaConsumer, for example, offers both -- but this
> > > > seems unnecessary and I think either Map or Properties, but not both,
> > is
> > > > sufficient)
> > > >
> > > > All this said I don't want to block the KIP forever on this question,
> > so
> > > I
> > > > think we should try to wrap things up one way or the other. If we can't
> > > > come to a consensus I'd advocate to just offer both a Map/Properties
> > and
> > > a
> > > > StreamsConfig version. That way if/when we ever have to deprecate one
> > of
> > > > them, it's less disruptive to everyone who hopefully was already using
> > > the
> > > > other option (imo it's more likely we'd want/need to deprecate the
> > > > StreamsConfig version and I also feel this will be the less popular
> > > option
> > > > since it seems only needed by those using spring)
> > > >
> > > > Thoughts?
> > > >
> > > > On Mon, Mar 24, 2025 at 2:11 PM Lucas Brutschy
> > > > <lbruts...@confluent.io.invalid> wrote:
> > > >
> > > >> 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><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>>
> > > >>>>> <
> > > >>>>>
> > > >>>>
> > > >>
> > >
> > 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><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
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>
> > > >>>>>
> > > >>>>
> > > >>
> > > >
> > >
> > >
> >

Reply via email to