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 > > > >> > > > >> > > > > > > > > >