Hi all, KIP-839 has been created to progress on the builder way https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=211884640
Kr, F. Le ven. 13 mai 2022 à 19:15, Colin McCabe <cmcc...@apache.org> a écrit : > I agree. I would really like to see a builder interface here. If you > changed the KIP to add this, you'd have to do the vote again, but I think > it would be well worth it. > > best, > Colin > > > On Thu, May 12, 2022, at 00:13, Bruno Cadonna wrote: > > Hi Francois, > > > > Modifying this KIP or starting a new one is your call. > > > > I guess the idea of the builder might cause some more discussions. So if > > you want to get a working version released as soon as possible, I would > > opt to get the current KIP implemented and create a new one for the > > builder. If time is not an issue I would modify the current KIP. > > > > But as I said: It's your call. > > > > Best, > > Bruno > > > > On 11.05.22 11:01, François Rosière wrote: > >> To be clear, there is no problem for me to update the current KIP with > the > >> builder approach. > >> It's not a lot of work in terms of code. > >> So, up to you. Let me know and I will do the necessary to go in one or > the > >> other direction... > >> Thanks again for the feedbacks. > >> > >> Le mer. 11 mai 2022 à 10:52, François Rosière < > francois.rosi...@gmail.com> > >> a écrit : > >> > >>> Hello, > >>> > >>> Builder is clearly the way to go for future releases of Kafka. > >>> > >>> If we align streams, we would have 3 builders > >>> > >>> new ConsumerBuilder<String, MyPojo>() > >>> .withKeyDeserializer(<KEY_DESERIALIZER>) > >>> .withValueDeserializer(<VALUE_DESERIALIZER>) > >>> .withInterceptors(<LIST_OF_INTERCEPTORS>) > >>> .withMetricsReporter(<METRICS_REPORTER>) > >>> .build(<MAP_OR_PROPERTIES_OR_CONFIG>); > >>> > >>> new ProducerBuilder<String, MyPojo>() > >>> .withKeySerializer(<KEY_SERIALIZER>) > >>> .withValueSerializer(<VALUE_SERIALIZER>) > >>> .withInterceptors(<LIST_OF_INTERCEPTORS>) > >>> .withPartitioner(<PARTITIONER>) > >>> .withMetricsReporter(<METRICS_REPORTER>) > >>> .build(<MAP_OR_PROPERTIES_OR_CONFIG>); > >>> > >>> new KafkaStreamsBuilder(<TOPOLOGY>) > >>> .withProducerInterceptors(<LIST_OF_PRODUER_INTERCEPTORS>) > >>> .withConsumerInterceptors(<LIST_OF_CONSUMER_INTERCEPTORS>) > >>> .withTime(<TIME>) > >>> .withKafkaClientSupplier(<KAFKA_CLIENT_SUPPLIER>) > >>> .withMetricsReporter(<METRICS_REPORTER>) > >>> .build(<MAP_OR_PROPERTIES_OR_CONFIG>); > >>> > >>> The builder property would always override the configuration > "instances". > >>> There is maybe other methods to add to the builders... > >>> The map, properties or config could be given to the constructor of the > >>> builder instead of the build method... > >>> At the end, we may only keep one single constructor in the Producer, > >>> Consumer and KafkaStreams obects. > >>> > >>> @Chris, @Bruno, thank you for your replies and proposals. Do you want I > >>> create another KIP explaining the builder approach or do you prefer to > do > >>> it? > >>> > >>> Kr, > >>> > >>> F. > >>> > >>> > >>> Le mer. 11 mai 2022 à 09:46, Bruno Cadonna <cado...@apache.org> a > écrit : > >>> > >>>> Hi Francois and Chris, > >>>> > >>>> I find the idea of the builder interesting. > >>>> > >>>> I think we should go ahead with the current KIP as it is to allow > >>>> Francois to fix his issue soon. If one of you or both want to push > >>>> forward the builder idea, feel free to create a new KIP and discuss it > >>>> with the community. > >>>> > >>>> Regarding Francois' questions: > >>>> > >>>> 3. If the existing constructors should be removed, they need to be > >>>> marked as deprecated and removed in one of the next major releases. > >>>> > >>>> 5. Yes, I think Streams should be aligned. > >>>> > >>>> Both questions should be discussed in the context of a new KIP about > the > >>>> builder idea. > >>>> > >>>> Best, > >>>> Bruno > >>>> > >>>> On 11.05.22 04:24, Chris Egerton wrote: > >>>>> Hi Francois, > >>>>> > >>>>> Thanks for your thoughts. I think it's worth noting that in regards > to > >>>> item > >>>>> 2, it's possible to explicitly declare the type parameters for a > builder > >>>>> without capturing it in a variable; for example: > >>>>> > >>>>> KafkaProducer<String, Integer> p = new Builder<String, Integer>(...) > >>>>> .withKeySerializer(new StringSerializer()) > >>>>> .withValueSerializer(new IntegerSerializer()) > >>>>> .build(); > >>>>> > >>>>> That aside, given the three binding votes already cast on the vote > >>>> thread, > >>>>> it's probably too late to be worth changing direction at this point. > >>>> Thanks > >>>>> for entertaining the proposal, and congratulations on your KIP! > >>>>> > >>>>> Cheers, > >>>>> > >>>>> Chris > >>>>> > >>>>> On Tue, May 10, 2022 at 5:33 PM François Rosière < > >>>> francois.rosi...@gmail.com> > >>>>> wrote: > >>>>> > >>>>>> Hello Chris, > >>>>>> > >>>>>> Thanks for the feedback. Builders is definitely the pattern to apply > >>>> when > >>>>>> an object needs to be built using different arguments/combinations. > >>>>>> > >>>>>> Here are my thoughts about the proposal: > >>>>>> > >>>>>> 1. The builder should only expose meaningful methods for the users > >>>> such as > >>>>>> the interceptors, the serializer/deserializer, partitioner, etc. A > >>>> method > >>>>>> like the configured instances is internal and should not be exposed > if > >>>> we > >>>>>> don't want to expose the config itself. Using this internal method > is > >>>> the > >>>>>> only way to solve the issue if the config is exposed. > >>>>>> > >>>>>> 2. As the key and value types are not given, a variable will need > to be > >>>>>> created for the builder before being used. Otherwise, there is no > way > >>>> to > >>>>>> infer the type correctly. Breaks a bit the inline usage with DSL > style. > >>>>>> > >>>>>> 3. What about existing constructors, they would need to stay to keep > >>>>>> compatibility with existing o could they be removed in benefit of > the > >>>>>> builder? > >>>>>> > >>>>>> 4. Having an access to the config also gives a way to also fine tune > >>>> other > >>>>>> aspects such as the logging related to the config. Log unused, skip > >>>> some > >>>>>> properties, etc. > >>>>>> > >>>>>> 5. What about streams? Shouldn't it be aligned? > >>>>>> > >>>>>> So, to summarise, the KIP was a best effort solution to support > already > >>>>>> configured instances related to both the producer and the consumer. > >>>>>> The builder will work, it's just a matter of deciding the best > >>>> approach... > >>>>>> for me, both solutions are fine, I just need a way to inject already > >>>>>> configured dependencies into the producers and consumers. > >>>>>> > >>>>>> If we conclude, I will drop a PR on Github. > >>>>>> > >>>>>> Kr, > >>>>>> > >>>>>> F. > >>>>>> > >>>>>> Le mar. 10 mai 2022 à 15:01, Chris Egerton <fearthecel...@gmail.com> > a > >>>>>> écrit : > >>>>>> > >>>>>>> Hi Francois, > >>>>>>> > >>>>>>> Thanks for the KIP! I sympathize with the issue you're facing and > with > >>>>>>> John's reluctance to let perfect be the enemy of good, and if KIP > >>>> freeze > >>>>>>> were tomorrow, I think this would be good enough. Given that we > still > >>>>>> have > >>>>>>> some time to work with, I'd like to propose an alternative approach > >>>> and > >>>>>> see > >>>>>>> what your thoughts are. > >>>>>>> > >>>>>>> There are a few issues with the current client APIs that are > closely > >>>>>>> related to the KIP: > >>>>>>> 1. Too many constructors (there are currently four each for > >>>> KafkaProducer > >>>>>>> and KafkaConsumer, yet they all do basically the same thing) > >>>>>>> 2. Lack of type safety with interceptors (you have no way to > enforce > >>>> at > >>>>>>> compile time that your ProducerInterceptor<String, Integer> is used > >>>> with > >>>>>> a > >>>>>>> Serializer<String> and Serializer<Integer>, for example) > >>>>>>> 3. Inflexibility and inconsistency with instantiation of pluggable > >>>>>>> interfaces (you can bring your own (de)serializers, but everything > >>>> else > >>>>>>> gets instantiated and configured for you at producer/consumer > >>>>>> construction > >>>>>>> time) > >>>>>>> > >>>>>>> The KIP as it exists now will only address item 3, and will > exacerbate > >>>>>> item > >>>>>>> 1. > >>>>>>> > >>>>>>> In addition, there are a few new issues introduced by the KIP as it > >>>>>> exists > >>>>>>> now: > >>>>>>> 1. Tighter coupling between the ProducerConfig/ConsumerConfig > classes > >>>> and > >>>>>>> the KafkaProducer/KafkaConsumer classes. Any change we make in the > >>>> future > >>>>>>> that breaks either of these config classes in unexpected ways (but > >>>> which > >>>>>>> does not break the KafkaProducer/KafkaConsumer constructors that do > >>>> not > >>>>>>> accept these classes as parameters) will now have a much higher > >>>> chance to > >>>>>>> also break a user's entire producer/consumer application. > >>>>>>> 2. Complexity for users like yourself who would like to override > >>>> behavior > >>>>>>> in a ProducerConfig/ConsumerConfig in order to inject > pre-instantiated > >>>>>>> dependencies. The example in the KIP overrides > >>>>>>> AbstractConfig::getConfiguredInstances [1] in order to achieve > this. > >>>> But > >>>>>>> there are two other overloaded variants of getConfiguredInstances, > and > >>>>>> two > >>>>>>> AbstractConfig::getConfiguredInstance methods that also exist. We'd > >>>>>> either > >>>>>>> need to establish a dependency graph between these methods (e.g., > some > >>>>>>> methods are guaranteed to invoke another overloaded variant) as > part > >>>> of > >>>>>> the > >>>>>>> public API for the AbstractConfig, or users would need to override > >>>> every > >>>>>>> single one of these methods in order to ensure that their code > won't > >>>>>> break > >>>>>>> at runtime after bumping their Kafka version. > >>>>>>> > >>>>>>> I think introducing the builder pattern for KafkaProducer and > >>>>>> KafkaConsumer > >>>>>>> would alleviate all of these issues. As a rough draft of what the > API > >>>>>> might > >>>>>>> look like for KafkaProducer: > >>>>>>> > >>>>>>> public class Builder<K, V> { > >>>>>>> private final Map<String, Object> props; > >>>>>>> private Serializer<K> keySerializer; > >>>>>>> private Serializer<V> valueSerializer; > >>>>>>> private List<ProducerInterceptor<K, V>> interceptors; > >>>>>>> private Map<String, Object> configuredInstances; > >>>>>>> private Map<String, List<Object>> configuredInstanceLists; > >>>>>>> > >>>>>>> public Builder(Map<String, Object> props) { > >>>>>>> this.props = props; > >>>>>>> this.interceptors = new ArrayList<>(); > >>>>>>> this.configuredInstances = new HashMap<>(); > >>>>>>> this.configuredInstanceLists = new HashMap<>(); > >>>>>>> } > >>>>>>> > >>>>>>> // Use this serializer, if non-null > >>>>>>> // Will take precedence over any serializer class specified > in > >>>> the > >>>>>>> properties for this producer > >>>>>>> public Builder withKeySerializer(Serializer<K> serializer) { > >>>>>>> this.keySerializer = serializer; > >>>>>>> return this; > >>>>>>> } > >>>>>>> > >>>>>>> public Builder withValueSerializer(Serializer<V> serializer) > { > >>>>>>> this.valueSerializer = serializer; > >>>>>>> return this; > >>>>>>> } > >>>>>>> > >>>>>>> // Use these interceptors (has no effect if null) > >>>>>>> // Each must already be configured > >>>>>>> // Will be combined with any interceptor classes also > specified > >>>> in > >>>>>> the > >>>>>>> properties for this producer > >>>>>>> public Builder withInterceptors(List<ProducerInterceptor<K, > V>> > >>>>>>> interceptors) { > >>>>>>> if (interceptors != null) { > >>>>>>> this.interceptors.addAll(interceptors); > >>>>>>> } > >>>>>>> return this; > >>>>>>> } > >>>>>>> > >>>>>>> // Use this plugin instance, if non-null > >>>>>>> // Must already be configured > >>>>>>> // Will take precedence over any plugin class specified for > the > >>>> same > >>>>>>> property in the properties for this producer (wording here needs > work > >>>> but > >>>>>>> you get the idea) > >>>>>>> public Builder withConfiguredInstance(String property, Object > >>>>>> instance) > >>>>>>> { > >>>>>>> this.configuredInstances.put(property, instance); > >>>>>>> return this; > >>>>>>> } > >>>>>>> > >>>>>>> // Use these plugin instances (has no effect if null) > >>>>>>> // Each must already be configured > >>>>>>> // Will be combined with any plugin classes also specified > for > >>>> the > >>>>>> same > >>>>>>> property in the properties for this consumer > >>>>>>> public Builder withConfiguredInstances(String property, > >>>> List<Object> > >>>>>>> instances) { > >>>>>>> this.configuredInstanceLists.put(property, instances); > >>>>>>> return this; > >>>>>>> } > >>>>>>> > >>>>>>> public KafkaProducer<K, V> build() { ... } > >>>>>>> } > >>>>>>> > >>>>>>> Thoughts? > >>>>>>> > >>>>>>> [1] - > >>>>>>> > >>>>>>> > >>>>>> > >>>> > https://kafka.apache.org/31/javadoc/org/apache/kafka/common/config/AbstractConfig.html#getConfiguredInstances(java.lang.String,java.lang.Class,java.util.Map) > >>>>>>> > >>>>>>> Cheers, > >>>>>>> > >>>>>>> Chris > >>>>>>> > >>>>>>> On Mon, May 9, 2022 at 4:55 PM Bruno Cadonna <cado...@apache.org> > >>>> wrote: > >>>>>>> > >>>>>>>> Hi Francois, > >>>>>>>> > >>>>>>>> I think you can go ahead and call for votes. > >>>>>>>> > >>>>>>>> Could you please also clean up a little bit the KIP since it has > >>>> still > >>>>>>>> parts that refer to its first version? For example, > "Compatibility, > >>>>>>>> Deprecation, and Migration Plan" still mentions only two > >>>> constructors. > >>>>>>>> IMO you can also remove section "Public Interfaces" since it does > not > >>>>>>>> contain much information. > >>>>>>>> > >>>>>>>> Best, > >>>>>>>> Bruno > >>>>>>>> > >>>>>>>> On 09.05.22 17:45, Bruno Cadonna wrote: > >>>>>>>>> Hi Francois, > >>>>>>>>> > >>>>>>>>> You can open a PR and people can review it, but it must not be > >>>> merged > >>>>>>>>> until the KIP is approved. > >>>>>>>>> > >>>>>>>>> Best, > >>>>>>>>> Bruno > >>>>>>>>> > >>>>>>>>> On 09.05.22 16:07, François Rosière wrote: > >>>>>>>>>> Can a PR be dropped on Github or do we still need some approval > >>>>>> first? > >>>>>>>>>> > >>>>>>>>>> Le dim. 8 mai 2022 à 06:08, John Roesler <vvcep...@apache.org> > a > >>>>>>> écrit > >>>>>>>> : > >>>>>>>>>> > >>>>>>>>>>> Thanks, François! > >>>>>>>>>>> > >>>>>>>>>>> Those changes look good to me. > >>>>>>>>>>> > >>>>>>>>>>> Thanks, > >>>>>>>>>>> -John > >>>>>>>>>>> > >>>>>>>>>>> On Fri, May 6, 2022, at 13:51, François Rosière wrote: > >>>>>>>>>>>> The KIP has been updated to reflect the last discussion > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>> > >>>>>>> > >>>>>> > >>>> > https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=211882578#KIP832:Allowcreatingaproducer/consumerusingaproducer/consumerconfig-ProposedChanges > >>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>> Le ven. 6 mai 2022 à 20:44, François Rosière > >>>>>>>>>>>> <francois.rosi...@gmail.com> > >>>>>>>>>>> a > >>>>>>>>>>>> écrit : > >>>>>>>>>>>> > >>>>>>>>>>>>> Hello, > >>>>>>>>>>>>> > >>>>>>>>>>>>> No problem to also add a constructor taking the > StreamsConfig in > >>>>>>> the > >>>>>>>>>>>>> TopologyTestDriver. > >>>>>>>>>>>>> > >>>>>>>>>>>>> Summary about the changes to apply: > >>>>>>>>>>>>> > >>>>>>>>>>>>> - Create 2 new constructors in KafkaProducer > >>>>>>>>>>>>> - Create a new constructor in KafkaConsumer and > increase de > >>>>>>>>>>> visibility > >>>>>>>>>>>>> of an existing one > >>>>>>>>>>>>> - Create a new constructor in TopologyTestDriver > >>>>>>>>>>>>> > >>>>>>>>>>>>> Kr, > >>>>>>>>>>>>> > >>>>>>>>>>>>> F. > >>>>>>>>>>>>> > >>>>>>>>>>>>> Le ven. 6 mai 2022 à 16:57, John Roesler < > vvcep...@apache.org> > >>>> a > >>>>>>>> écrit > >>>>>>>>>>> : > >>>>>>>>>>>>> > >>>>>>>>>>>>>> Thanks for the KIP, François! > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> I'm generally in favor of your KIP, since you're > >>>>>>>>>>>>>> proposing to follow the existing pattern of the > >>>>>>>>>>>>>> constructors for both Producer and Consumer, > >>>>>>>>>>>>>> but with the config object instead of Properties > >>>>>>>>>>>>>> or Map configs. Also, because we already have > >>>>>>>>>>>>>> this pattern in Streams, and we are just > >>>>>>>>>>>>>> extending it to Producer and Consumer. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Following on the KIP-378 discussion, I do still think > >>>>>>>>>>>>>> this is somewhat of an abuse of the Config objects, > >>>>>>>>>>>>>> and it would be better to have a formal dependency > >>>>>>>>>>>>>> injection interface, but I also don't want to let perfect > >>>>>>>>>>>>>> be the enemy of good. Since it looks like this approach > >>>>>>>>>>>>>> works, and there is also some precedent for it already, > >>>>>>>>>>>>>> I'd be inclined to approve it. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Since KIP-378 didn't make it over the finish line, and it > >>>>>>>>>>>>>> seems like a small expansion to your proposal, do you > >>>>>>>>>>>>>> mind also adding the StreamsConfig to the > >>>>>>>>>>>>>> TopologyTestDriver constructors? That way, we can go > >>>>>>>>>>>>>> ahead and resolve both KIPs at once. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Thank you, > >>>>>>>>>>>>>> -John > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> On Fri, May 6, 2022, at 06:06, François Rosière wrote: > >>>>>>>>>>>>>>> To stay consistent with existing code, we should simply > add 2 > >>>>>>>>>>>>>> constructors. > >>>>>>>>>>>>>>> One with ser/deser and one without. > >>>>>>>>>>>>>>> So that, users have the choice to use one or the other. > >>>>>>>>>>>>>>> I updated the KIP accordingly. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Le ven. 6 mai 2022 à 12:55, François Rosière < > >>>>>>>>>>>>>> francois.rosi...@gmail.com> a > >>>>>>>>>>>>>>> écrit : > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> On the other hand, the KafkaConsumer constructor with a > >>>>>> config + > >>>>>>>>>>>>>>>> serializer and deserializer already exists but is not > public. > >>>>>>>>>>>>>>>> It would also complexify a bit the caller to not have the > >>>>>>>>>>>>>>>> serializer/deserializer exposed at constructor level. > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> Once the KIP would have been implemented, for streams, > >>>> instead > >>>>>>> of > >>>>>>>>>>>>>> having a > >>>>>>>>>>>>>>>> custom config (already possible), I may simply define a > >>>> custom > >>>>>>>>>>>>>>>> KafkaClientSupplier reusing the custom configs of both the > >>>>>>>> producer > >>>>>>>>>>>>>> and the > >>>>>>>>>>>>>>>> consumer. > >>>>>>>>>>>>>>>> This supplier currently creates producers and consumers > using > >>>>>>> the > >>>>>>>>>>>>>>>> constructors with a map of config + > serializer/deserializer. > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> So, it seems it's easier to have the constructor with 3 > >>>>>>>> parameters. > >>>>>>>>>>>>>> But in > >>>>>>>>>>>>>>>> any case, it will work if the config can be accessed... > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> Le ven. 6 mai 2022 à 12:14, François Rosière < > >>>>>>>>>>>>>> francois.rosi...@gmail.com> > >>>>>>>>>>>>>>>> a écrit : > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> Hello, > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> We may create a constructor with a single parameter > which is > >>>>>>> the > >>>>>>>>>>>>>> config > >>>>>>>>>>>>>>>>> but then, I would need to give the > serializer/deserializer > >>>> by > >>>>>>>> also > >>>>>>>>>>>>>>>>> overriding the config. > >>>>>>>>>>>>>>>>> Like I would do for the interceptors. > >>>>>>>>>>>>>>>>> So, no real opinion on that, both solutions are ok for > me. > >>>>>>>>>>>>>>>>> Maybe easier to take the approach of the single > parameter. > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> Hope it respond to the question. > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> Kr, > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> F. > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> Le ven. 6 mai 2022 à 11:59, Bruno Cadonna < > >>>>>> cado...@apache.org> > >>>>>>> a > >>>>>>>>>>>>>> écrit : > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> Hi Francois, > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> Thank you for updating the KIP! > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> Now the motivation of the KIP is much clearer. > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> I would still be interested in: > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> >> 2. Why do you only want to change/add the > >>>> constructors > >>>>>>> that > >>>>>>>>>>> take > >>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>> >> properties objects and de/serializers and you do > not > >>>>>> also > >>>>>>>>>>> want to > >>>>>>>>>>>>>>>>>> >> add/change the constructors that take only the > >>>>>>> properties? > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>>>>>> Bruno > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> On 05.05.22 23:15, François Rosière wrote: > >>>>>>>>>>>>>>>>>>> Hello Bruno, > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> The KIP as been updated. Feel free to give more > feedbacks > >>>>>>> and I > >>>>>>>>>>>>>> will > >>>>>>>>>>>>>>>>>>> complete accordingly. > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> Kr, > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> F. > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> Le jeu. 5 mai 2022 à 22:22, Bruno Cadonna < > >>>>>>> cado...@apache.org> > >>>>>>>>>>> a > >>>>>>>>>>>>>>>>>> écrit : > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> Hi Francois, > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> Thanks for the KIP! > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> Here my first feedback: > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> 1. Could you please extend the motivation section, so > >>>> that > >>>>>>> it > >>>>>>>>>>> is > >>>>>>>>>>>>>> clear > >>>>>>>>>>>>>>>>>>>> for a non-Spring dev why the change is needed? > Usually, a > >>>>>>>>>>>>>> motivation > >>>>>>>>>>>>>>>>>>>> section benefits a lot from an actual example. > >>>>>>>>>>>>>>>>>>>> Extending the motivation section would also make the > KIP > >>>>>>> more > >>>>>>>>>>>>>>>>>>>> self-contained which is important IMO since this is > kind > >>>>>> of > >>>>>>> a > >>>>>>>>>>> log > >>>>>>>>>>>>>> of > >>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>> major changes to Kafka. Descriptions of major changes > >>>>>> should > >>>>>>>>>>> not > >>>>>>>>>>>>>>>>>>>> completely depend on external links (which may become > >>>> dead > >>>>>>> in > >>>>>>>>>>>>>> future). > >>>>>>>>>>>>>>>>>>>> Referencing external resources to point to more > details > >>>> or > >>>>>>>> give > >>>>>>>>>>>>>>>>>> context > >>>>>>>>>>>>>>>>>>>> is useful, though. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> 2. Why do you only want to change/add the constructors > >>>>>> that > >>>>>>>>>>> take > >>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>> properties objects and de/serializers and you do not > also > >>>>>>> want > >>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>> add/change the constructors that take only the > >>>> properties? > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> 3. I found the following stalled KIP whose motivation > is > >>>>>>>> really > >>>>>>>>>>>>>>>>>> similar > >>>>>>>>>>>>>>>>>>>> to yours: > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>> > >>>>>>> > >>>>>> > >>>> > https://cwiki.apache.org/confluence/display/KAFKA/KIP-378%3A+Enable+Dependency+Injection+for+Kafka+Streams+handlers > >>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> That KIP is also the reason why Kafka Streams still > has > >>>>>> the > >>>>>>>>>>>>>>>>>> constructors > >>>>>>>>>>>>>>>>>>>> with the StreamsConfig parameter. Maybe you want to > >>>>>> mention > >>>>>>>>>>> this > >>>>>>>>>>>>>> KIP > >>>>>>>>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>>>> yours or even incorporate the remaining topology test > >>>>>> driver > >>>>>>>>>>> API > >>>>>>>>>>>>>>>>>> changes > >>>>>>>>>>>>>>>>>>>> in your KIP. > >>>>>>>>>>>>>>>>>>>> Some related links: > >>>>>>>>>>>>>>>>>>>> - > >>>>>>>>>>>>>> > >>>>>> https://github.com/apache/kafka/pull/5344#issuecomment-413350338 > >>>>>>>>>>>>>>>>>>>> - https://github.com/apache/kafka/pull/10484 > >>>>>>>>>>>>>>>>>>>> - https://issues.apache.org/jira/browse/KAFKA-6386 > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>>>>>>>> Bruno > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> On 04.05.22 22:26, François Rosière wrote: > >>>>>>>>>>>>>>>>>>>>> Hi all, > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> KIP-832 has been created to allow implementing Spring > >>>>>>> managed > >>>>>>>>>>>>>>>>>>>> interceptors > >>>>>>>>>>>>>>>>>>>>> for Producers and Consumers. > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> At the moment, interceptors are given as > configuration > >>>>>>>> classes > >>>>>>>>>>>>>> to the > >>>>>>>>>>>>>>>>>>>>> producer and consumer configurations. So, the idea > here > >>>>>>> would > >>>>>>>>>>> be > >>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>> create > >>>>>>>>>>>>>>>>>>>>> 2 new constructors to allow using a Producer and > >>>> Consumer > >>>>>>>>>>>>>>>>>> configuration > >>>>>>>>>>>>>>>>>>>>> instead of properties or a key value map of > >>>>>> configurations > >>>>>>>>>>>>>> entries. > >>>>>>>>>>>>>>>>>>>>> Interceptors could then be given as instances by > >>>>>>> overriding a > >>>>>>>>>>>>>> config > >>>>>>>>>>>>>>>>>>>> method. > >>>>>>>>>>>>>>>>>>>>> More details can be found in the Spring issue. > >>>>>>>>>>>>>>>>>>>>> > >>>>>>> https://github.com/spring-projects/spring-kafka/issues/2244 > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> Any feedback, proposal, vote for this KIP would be > more > >>>>>>> than > >>>>>>>>>>>>>> welcome. > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> Kind regards, > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> Francois R. > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> Le lun. 2 mai 2022 à 21:05, François Rosière < > >>>>>>>>>>>>>>>>>> francois.rosi...@gmail.com> > >>>>>>>>>>>>>>>>>>>> a > >>>>>>>>>>>>>>>>>>>>> écrit : > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> Kip link: > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>> > >>>>>>> > >>>>>> > >>>> > https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=211882578 > >>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>> > >>>>>>> > >>>>>> > >>>>> > >>>> > >>> > >> >