Hi Sebastien,

A constructor for Map and Properties each looks good to me.
Thanks for the update to the KIP.

-Bill

On Wed, Jun 11, 2025 at 8:16 AM Lucas Brutschy
<lbruts...@confluent.io.invalid> wrote:

> 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