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