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 > [2] > > 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 > >>>>>> > >>>>>>>> > >>>>>>> > >>>>>>> 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 > >>>>>>> > >>>>>>> > >>>>>> > >>>>> > >>>> > >> > > > >