Thanks, +1 (binding). On Mon, Sep 3, 2018 at 6:28 AM Viktor Somogyi-Vass <viktorsomo...@gmail.com> wrote:
> Apologies, miscounted the binding votes but the good news is that we need > only one. > > Cheers, > Viktor > > On Mon, Sep 3, 2018 at 11:09 AM Viktor Somogyi-Vass < > viktorsomo...@gmail.com> > wrote: > > > Hi All, > > > > I have completed my binary compatibility testing on this as well. Created > > a small script & example to make this reproducible: > > https://gist.github.com/viktorsomogyi/391defca73e7a46a2c6a40bc699231d4 . > > > > Also, thanks for the votes so far, we're still awaiting for 2 binding. > > > > Cheers, > > Viktor > > > > On Thu, Aug 30, 2018 at 5:09 PM Harsha <ka...@harsha.io> wrote: > > > >> +1. > >> Thanks, > >> Harsha > >> > >> On Thu, Aug 30, 2018, at 4:19 AM, Attila Sasvári wrote: > >> > Thanks for the KIP and the updates Viktor! > >> > > >> > +1 (non-binding) > >> > > >> > > >> > > >> > On Wed, Aug 29, 2018 at 10:44 AM Manikumar <manikumar.re...@gmail.com > > > >> > wrote: > >> > > >> > > +1 (non-binding) > >> > > > >> > > Thanks for the KIP. > >> > > > >> > > On Wed, Aug 29, 2018 at 1:41 AM Jason Gustafson <ja...@confluent.io > > > >> > > wrote: > >> > > > >> > > > +1 Thanks for the updates. > >> > > > > >> > > > On Tue, Aug 28, 2018 at 1:15 AM, Viktor Somogyi-Vass < > >> > > > viktorsomo...@gmail.com> wrote: > >> > > > > >> > > > > Sure, I've added it. I'll also do the testing today. > >> > > > > > >> > > > > On Mon, Aug 27, 2018 at 5:03 PM Ismael Juma <ism...@juma.me.uk> > >> wrote: > >> > > > > > >> > > > > > Thanks Viktor. I think it would be good to verify that > existing > >> > > > > > ExtendedSerializer implementations work without recompiling. > >> This > >> > > could > >> > > > > be > >> > > > > > done as a manual test. If you agree, I suggest adding it to > the > >> > > testing > >> > > > > > plan section. > >> > > > > > > >> > > > > > Ismael > >> > > > > > > >> > > > > > On Mon, Aug 27, 2018 at 7:57 AM Viktor Somogyi-Vass < > >> > > > > > viktorsomo...@gmail.com> > >> > > > > > wrote: > >> > > > > > > >> > > > > > > Thanks guys, I've updated my KIP with this info (so to keep > >> > > solution > >> > > > > #1). > >> > > > > > > If you find it good enough, please vote as well or let me > >> know if > >> > > you > >> > > > > > think > >> > > > > > > something is missing. > >> > > > > > > > >> > > > > > > On Sat, Aug 25, 2018 at 1:14 AM Ismael Juma < > >> ism...@juma.me.uk> > >> > > > wrote: > >> > > > > > > > >> > > > > > > > I'm OK with 1 too. It makes me a bit sad that we don't > have > >> a > >> > > path > >> > > > > for > >> > > > > > > > removing the method without headers, but it seems like the > >> > > simplest > >> > > > > and > >> > > > > > > > least confusing option (I am assuming that headers are not > >> needed > >> > > > in > >> > > > > > the > >> > > > > > > > serializers in the common case). > >> > > > > > > > > >> > > > > > > > Ismael > >> > > > > > > > > >> > > > > > > > On Fri, Aug 24, 2018 at 2:42 PM Jason Gustafson < > >> > > > ja...@confluent.io> > >> > > > > > > > wrote: > >> > > > > > > > > >> > > > > > > > > Hey Viktor, > >> > > > > > > > > > >> > > > > > > > > Good summary. I agree that option 1) seems like the > >> simplest > >> > > > choice > >> > > > > > > and, > >> > > > > > > > as > >> > > > > > > > > you note, we can always add the default implementation > >> later. > >> > > > I'll > >> > > > > > > leave > >> > > > > > > > > Ismael to make a case for the circular forwarding > >> approach ;) > >> > > > > > > > > > >> > > > > > > > > -Jason > >> > > > > > > > > > >> > > > > > > > > On Fri, Aug 24, 2018 at 3:02 AM, Viktor Somogyi-Vass < > >> > > > > > > > > viktorsomo...@gmail.com> wrote: > >> > > > > > > > > > >> > > > > > > > > > I think in the first draft I didn't provide an > >> implementation > >> > > > for > >> > > > > > > them > >> > > > > > > > as > >> > > > > > > > > > it seemed very simple and straightforward. I looked > up a > >> > > couple > >> > > > > of > >> > > > > > > > > > implementations of the ExtendedSerializers on github > >> and the > >> > > > > > general > >> > > > > > > > > > behavior seems to be that they delegate to the 2 > >> argument > >> > > > > > > (headerless) > >> > > > > > > > > > method: > >> > > > > > > > > > > >> > > > > > > > > > > >> https://github.com/khoitnm/practice-spring-kafka-grpc/blob/ > >> > > > > > > > > > > >> a6fc9b3395762c4889807baedd822f4653d5dcdd/kafka-common/src/ > >> > > > > > > > > > > main/java/org/tnmk/common/kafka/serialization/protobuf/ > >> > > > > > > > > > ProtobufSerializer.java > >> > > > > > > > > > > >> > > > > > > > >> > > > > >> https://github.com/hong-zhu/nxgen/blob/5cf1427d4e1a8f5c7fab47955af32a > >> > > > > > > > > > > 0d4f4873af/nxgen-kafka-client/src/main/java/nxgen/kafka/ > >> > > > > > > > > > client/event/serdes/EventSerializer.java > >> > > > > > > > > > https://github.com/jerry-jx/spring-kafka/blob/ > >> > > > > > > > > > > >> ac323ec5b8b9a0ca975db2f7322ff6878fce481a/spring-kafka/src/ > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > main/java/org/springframework/kafka/support/serializer/ > >> > > > > JsonSerializer.java > >> > > > > > > > > > > https://github.com/enzobonggio/nonblocking-kafka/blob/ > >> > > > > > > > > > > >> bc1a379b2d9593b46cf9604063bc5b38e2785d19/src/main/java/com/ > >> > > > > > > > > > example/kafka/producer/CustomJsonSerializer.java > >> > > > > > > > > > > >> > > > > > > > > > Of course 4 example is not representative but it shows > >> that > >> > > > these > >> > > > > > > users > >> > > > > > > > > > usually delegate to the "headerless" (2 argument) > >> method. > >> > > I've > >> > > > > > tried > >> > > > > > > to > >> > > > > > > > > > look it up on other code search sites but haven't had > >> much > >> > > luck > >> > > > > so > >> > > > > > > far. > >> > > > > > > > > > Given these examples and the way they implement them > >> I'd say > >> > > > it's > >> > > > > > > more > >> > > > > > > > > > common to delegate to the headerless method, that's > why > >> I > >> > > think > >> > > > > > it's > >> > > > > > > a > >> > > > > > > > > good > >> > > > > > > > > > approach for us too. Now having a default > >> implementation for > >> > > > that > >> > > > > > is > >> > > > > > > > > again > >> > > > > > > > > > a good question. I think current use cases wouldn't > >> change in > >> > > > > > either > >> > > > > > > > case > >> > > > > > > > > > (unless we deprecate the headerless one). > >> > > > > > > > > > For the new use cases it depends what do we want to > >> propagate > >> > > > > going > >> > > > > > > > > > forward. Do we want only one method to exist or two? > As > >> > > Ismael > >> > > > > > > > > highlighted > >> > > > > > > > > > it might be confusing if we have 2 methods, both with > >> default > >> > > > > > > > > > implementation and in this case we want to push the 3 > >> > > argument > >> > > > > one > >> > > > > > > for > >> > > > > > > > > > users. > >> > > > > > > > > > > >> > > > > > > > > > So I see three possible ways: > >> > > > > > > > > > 1.) Don't provide a default implementation for the > >> headerless > >> > > > > > method. > >> > > > > > > > > This > >> > > > > > > > > > supports the current implementations and encourages > the > >> > > > > delegation > >> > > > > > > > style > >> > > > > > > > > in > >> > > > > > > > > > future implementations. This might be the simplest > >> option. > >> > > > > > > > > > 2.) Provide a default implementation for the > headerless > >> > > method. > >> > > > > > This > >> > > > > > > > > would > >> > > > > > > > > > be a bit confusing, so we'd likely push the use of > the 3 > >> > > > > parameter > >> > > > > > > > method > >> > > > > > > > > > and deprecate the headerless. This would however > further > >> > > litter > >> > > > > the > >> > > > > > > > code > >> > > > > > > > > > base with deprecation warnings as we're using the > >> headerless > >> > > > > method > >> > > > > > > in > >> > > > > > > > a > >> > > > > > > > > > lot of places (think of the current > >> > > serializers/deserializers). > >> > > > > So > >> > > > > > in > >> > > > > > > > > this > >> > > > > > > > > > case we would want to clean up the code base a little > >> where > >> > > we > >> > > > > can > >> > > > > > > and > >> > > > > > > > > may > >> > > > > > > > > > remove the headerless method entirely in Kafka 3. But > >> they > >> > > > would > >> > > > > > hang > >> > > > > > > > > > around until that point. I think in this case the > >> > > > implementation > >> > > > > > for > >> > > > > > > > the > >> > > > > > > > > > headerless is a detail question as that is deprecated > >> so we > >> > > > don't > >> > > > > > > > expect > >> > > > > > > > > > new implementations to use that method. > >> > > > > > > > > > If we decide to move this way, we have explored two > >> options > >> > > so > >> > > > > far: > >> > > > > > > > > > returning null / empty array or throwing exceptions. > >> (And I > >> > > > > > honestly > >> > > > > > > > > > started to like the latter as calling that with no > real > >> > > > > > > implementation > >> > > > > > > > is > >> > > > > > > > > > really a programming error.) > >> > > > > > > > > > 3.) We can do it in multiple steps. In the first step > >> we do 1 > >> > > > and > >> > > > > > > later > >> > > > > > > > > 2. > >> > > > > > > > > > I think it would also make sense as the Kafka code > base > >> > > heavily > >> > > > > > uses > >> > > > > > > > the > >> > > > > > > > > > headerless method still (think of the existing > >> > > > > > > > serializers/deserializers) > >> > > > > > > > > > and it would give us time to eliminate/change those > use > >> > > cases. > >> > > > > > > > > > > >> > > > > > > > > > Cheers, > >> > > > > > > > > > Viktor > >> > > > > > > > > > > >> > > > > > > > > > On Thu, Aug 23, 2018 at 11:55 PM Jason Gustafson < > >> > > > > > ja...@confluent.io > >> > > > > > > > > >> > > > > > > > > > wrote: > >> > > > > > > > > > > >> > > > > > > > > > > To clarify, what I am suggesting is to only remove > the > >> > > > default > >> > > > > > > > > > > implementation for these methods. So users would be > >> > > required > >> > > > to > >> > > > > > > > > implement > >> > > > > > > > > > > serialize(topic, data) and deserialize(topic, data). > >> > > > > > > > > > > > >> > > > > > > > > > > -Jason > >> > > > > > > > > > > > >> > > > > > > > > > > On Thu, Aug 23, 2018 at 1:48 PM, Jason Gustafson < > >> > > > > > > ja...@confluent.io > >> > > > > > > > > > >> > > > > > > > > > > wrote: > >> > > > > > > > > > > > >> > > > > > > > > > > > Hey Viktor, > >> > > > > > > > > > > > > >> > > > > > > > > > > > Thinking about it a little more, I wonder if we > >> should > >> > > just > >> > > > > not > >> > > > > > > > > > provide a > >> > > > > > > > > > > > default method for serialize(topic, data) and > >> > > > > > deserialize(topic, > >> > > > > > > > > data). > >> > > > > > > > > > > > Implementing these methods is a trivial burden for > >> users > >> > > > and > >> > > > > it > >> > > > > > > > feels > >> > > > > > > > > > > like > >> > > > > > > > > > > > there's no good solution which allows both methods > >> to > >> > > have > >> > > > > > > default > >> > > > > > > > > > > > implementations. > >> > > > > > > > > > > > > >> > > > > > > > > > > > Also, ack on KIP-331. Thanks for the pointer. > >> > > > > > > > > > > > > >> > > > > > > > > > > > -Jason > >> > > > > > > > > > > > > >> > > > > > > > > > > > On Thu, Aug 23, 2018 at 12:30 PM, Viktor > >> Somogyi-Vass < > >> > > > > > > > > > > > viktorsomo...@gmail.com> wrote: > >> > > > > > > > > > > > > >> > > > > > > > > > > >> Hi Ismael, > >> > > > > > > > > > > >> > >> > > > > > > > > > > >> Regarding the deprecation of the 2 parameter > >> method: > >> > > > should > >> > > > > we > >> > > > > > > do > >> > > > > > > > > this > >> > > > > > > > > > > >> with > >> > > > > > > > > > > >> the Serializer interface as well? > >> > > > > > > > > > > >> > >> > > > > > > > > > > >> I've updated the "Rejected Alternatives" with a > >> few. > >> > > > > > > > > > > >> I've added this circular reference one too but > >> actually > >> > > > > > there's > >> > > > > > > a > >> > > > > > > > > way > >> > > > > > > > > > > >> (pretty heavyweight) by adding a guard class that > >> > > prevents > >> > > > > > > > recursive > >> > > > > > > > > > > >> invocation of either methods. I've tried this out > >> but it > >> > > > > seems > >> > > > > > > to > >> > > > > > > > me > >> > > > > > > > > > an > >> > > > > > > > > > > >> overshoot. So just for the sake of completeness > >> I'll > >> > > copy > >> > > > it > >> > > > > > > here. > >> > > > > > > > > :) > >> > > > > > > > > > > >> > >> > > > > > > > > > > >> public interface Deserializer<T> extends > Closeable > >> { > >> > > > > > > > > > > >> > >> > > > > > > > > > > >> class Guard { > >> > > > > > > > > > > >> > >> > > > > > > > > > > >> private Set<Object> objects = > >> > > > > > > > > Collections.synchronizedSet(new > >> > > > > > > > > > > >> HashSet<>()); // might as well use concurrent > >> hashmap > >> > > > > > > > > > > >> > >> > > > > > > > > > > >> private void methodCallInProgress(Object > >> x) { > >> > > > > > > > > > > >> objects.add(x); > >> > > > > > > > > > > >> } > >> > > > > > > > > > > >> > >> > > > > > > > > > > >> private boolean > >> isMethodCallInProgress(Object > >> > > x) { > >> > > > > > > > > > > >> return objects.contains(x); > >> > > > > > > > > > > >> } > >> > > > > > > > > > > >> > >> > > > > > > > > > > >> private void > >> clearMethodCallInProgress(Object > >> > > x) { > >> > > > > > > > > > > >> objects.remove(x); > >> > > > > > > > > > > >> } > >> > > > > > > > > > > >> > >> > > > > > > > > > > >> private <T> T guard(Supplier<T> > supplier) { > >> > > > > > > > > > > >> if > >> (GUARD.isMethodCallInProgress(this)) { > >> > > > > > > > > > > >> throw new > >> IllegalStateException("You > >> > > must > >> > > > > > > > implement > >> > > > > > > > > > one > >> > > > > > > > > > > of > >> > > > > > > > > > > >> the deserialize methods"); > >> > > > > > > > > > > >> } else { > >> > > > > > > > > > > >> try { > >> > > > > > > > > > > >> > >> GUARD.methodCallInProgress(this); > >> > > > > > > > > > > >> return supplier.get(); > >> > > > > > > > > > > >> } finally { > >> > > > > > > > > > > >> > >> > > GUARD.clearMethodCallInProgress(this); > >> > > > > > > > > > > >> } > >> > > > > > > > > > > >> } > >> > > > > > > > > > > >> } > >> > > > > > > > > > > >> } > >> > > > > > > > > > > >> > >> > > > > > > > > > > >> Guard GUARD = new Guard(); > >> > > > > > > > > > > >> > >> > > > > > > > > > > >> void configure(Map<String, ?> configs, > boolean > >> > > isKey); > >> > > > > > > > > > > >> > >> > > > > > > > > > > >> default T deserialize(String topic, byte[] > >> data) { > >> > > > > > > > > > > >> return GUARD.guard(() -> > deserialize(topic, > >> > > null, > >> > > > > > > data)); > >> > > > > > > > > > > >> } > >> > > > > > > > > > > >> > >> > > > > > > > > > > >> default T deserialize(String topic, Headers > >> headers, > >> > > > > > byte[] > >> > > > > > > > > data) > >> > > > > > > > > > { > >> > > > > > > > > > > >> return GUARD.guard(() -> > deserialize(topic, > >> > > > data)); > >> > > > > > > > > > > >> } > >> > > > > > > > > > > >> > >> > > > > > > > > > > >> @Override > >> > > > > > > > > > > >> void close(); > >> > > > > > > > > > > >> } > >> > > > > > > > > > > >> > >> > > > > > > > > > > >> > >> > > > > > > > > > > >> Cheers, > >> > > > > > > > > > > >> Viktor > >> > > > > > > > > > > >> > >> > > > > > > > > > > >> On Thu, Aug 23, 2018 at 3:50 PM Ismael Juma < > >> > > > > > ism...@juma.me.uk> > >> > > > > > > > > > wrote: > >> > > > > > > > > > > >> > >> > > > > > > > > > > >> > Also, we may consider deprecating the > deserialize > >> > > method > >> > > > > > that > >> > > > > > > > does > >> > > > > > > > > > not > >> > > > > > > > > > > >> take > >> > > > > > > > > > > >> > headers. Yes, it's a convenience, but it also > >> adds > >> > > > > > confusion. > >> > > > > > > > > > > >> > > >> > > > > > > > > > > >> > Ismael > >> > > > > > > > > > > >> > > >> > > > > > > > > > > >> > On Thu, Aug 23, 2018 at 6:48 AM Ismael Juma < > >> > > > > > > ism...@juma.me.uk> > >> > > > > > > > > > > wrote: > >> > > > > > > > > > > >> > > >> > > > > > > > > > > >> > > I think the KIP needs the rejected > alternatives > >> > > > section > >> > > > > to > >> > > > > > > > have > >> > > > > > > > > > more > >> > > > > > > > > > > >> > > detail. For example, another option would be > >> > > something > >> > > > > > like > >> > > > > > > > the > >> > > > > > > > > > > >> > following, > >> > > > > > > > > > > >> > > which works great as long as one overrides > one > >> of > >> > > the > >> > > > > > > methods, > >> > > > > > > > > but > >> > > > > > > > > > > >> pretty > >> > > > > > > > > > > >> > > bad if one doesn't. :) > >> > > > > > > > > > > >> > > > >> > > > > > > > > > > >> > > default T deserialize(String topic, byte[] > >> data) { > >> > > > > > > > > > > >> > > return deserialize(topic, null, data); > >> > > > > > > > > > > >> > > } > >> > > > > > > > > > > >> > > > >> > > > > > > > > > > >> > > default T deserialize(String topic, Headers > >> headers, > >> > > > > > byte[] > >> > > > > > > > > data) > >> > > > > > > > > > { > >> > > > > > > > > > > // > >> > > > > > > > > > > >> > > This is the new method > >> > > > > > > > > > > >> > > return deserialize(topic, data); > >> > > > > > > > > > > >> > > } > >> > > > > > > > > > > >> > > > >> > > > > > > > > > > >> > > > >> > > > > > > > > > > >> > > On Thu, Aug 23, 2018 at 3:57 AM Viktor > >> Somogyi-Vass > >> > > < > >> > > > > > > > > > > >> > > viktorsomo...@gmail.com> wrote: > >> > > > > > > > > > > >> > > > >> > > > > > > > > > > >> > >> Hi Jason, > >> > > > > > > > > > > >> > >> > >> > > > > > > > > > > >> > >> Thanks for the feedback. > >> > > > > > > > > > > >> > >> 1. I chose to return null here because > >> according to > >> > > > the > >> > > > > > > > > > > >> documentation it > >> > > > > > > > > > > >> > >> may return null data, therefore the users of > >> this > >> > > > > methods > >> > > > > > > are > >> > > > > > > > > > > >> perpared > >> > > > > > > > > > > >> > for > >> > > > > > > > > > > >> > >> getting a null. Thinking of it though it may > >> be > >> > > > better > >> > > > > to > >> > > > > > > > throw > >> > > > > > > > > > an > >> > > > > > > > > > > >> > >> exception by default because it'd indicate a > >> > > > > programming > >> > > > > > > > error. > >> > > > > > > > > > > >> However, > >> > > > > > > > > > > >> > >> would that be a backward incompatible > change? > >> I'm > >> > > > > simply > >> > > > > > > > > thinking > >> > > > > > > > > > > of > >> > > > > > > > > > > >> > this > >> > > > > > > > > > > >> > >> because this is a new behavior that we'd > >> introduce > >> > > > but > >> > > > > > I'm > >> > > > > > > > not > >> > > > > > > > > > sure > >> > > > > > > > > > > >> yet > >> > > > > > > > > > > >> > if > >> > > > > > > > > > > >> > >> it'd cause problems. > >> > > > > > > > > > > >> > >> Do you think it'd make sense to do the same > in > >> > > > > > `serialize`? > >> > > > > > > > > > > >> > >> 2. Yes, I believe that is covered in > KIP-331: > >> > > > > > > > > > > >> > >> > >> > > > > > > > > > > >> > >> > >> > > > > > > > > > > >> > > >> > > https://cwiki.apache.org/confluence/display/KAFKA/KIP- > >> > > > > 331+ > >> > > > > > > > > > > >> > >> > > > Add+default+implementation+to+close%28%29+and+configure%28% > >> > > > > > > > > > > >> 29+for+Serializer%2C+Deserializer+and+Serde > >> > > > > > > > > > > >> > >> > >> > > > > > > > > > > >> > >> Cheers, > >> > > > > > > > > > > >> > >> Viktor > >> > > > > > > > > > > >> > >> > >> > > > > > > > > > > >> > >> On Wed, Aug 22, 2018 at 6:11 PM Jason > >> Gustafson < > >> > > > > > > > > > > ja...@confluent.io> > >> > > > > > > > > > > >> > >> wrote: > >> > > > > > > > > > > >> > >> > >> > > > > > > > > > > >> > >> > Hey Viktor, > >> > > > > > > > > > > >> > >> > > >> > > > > > > > > > > >> > >> > This is a nice cleanup. Just a couple > quick > >> > > > > questions: > >> > > > > > > > > > > >> > >> > > >> > > > > > > > > > > >> > >> > 1. Rather than returning null for the > >> default > >> > > > > > > > > > `deserialize(topic, > >> > > > > > > > > > > >> > >> data)`, > >> > > > > > > > > > > >> > >> > would it be better to throw > >> > > > > > > UnsupportedOperationException? > >> > > > > > > > I > >> > > > > > > > > > > assume > >> > > > > > > > > > > >> > that > >> > > > > > > > > > > >> > >> > internally we'll always invoke the api > which > >> > > takes > >> > > > > > > headers. > >> > > > > > > > > > > >> Similarly > >> > > > > > > > > > > >> > >> for > >> > > > > > > > > > > >> > >> > `serialize(topic, data)`. > >> > > > > > > > > > > >> > >> > 2. Would it make sense to have default > no-op > >> > > > > > > > implementations > >> > > > > > > > > > for > >> > > > > > > > > > > >> > >> > `configure` and `close`? > >> > > > > > > > > > > >> > >> > > >> > > > > > > > > > > >> > >> > Thanks, > >> > > > > > > > > > > >> > >> > Jason > >> > > > > > > > > > > >> > >> > > >> > > > > > > > > > > >> > >> > On Wed, Aug 22, 2018 at 5:27 AM, Satish > >> Duggana < > >> > > > > > > > > > > >> > >> satish.dugg...@gmail.com> > >> > > > > > > > > > > >> > >> > wrote: > >> > > > > > > > > > > >> > >> > > >> > > > > > > > > > > >> > >> > > +1 > >> > > > > > > > > > > >> > >> > > > >> > > > > > > > > > > >> > >> > > On Wed, Aug 22, 2018 at 4:45 PM, Ted Yu > < > >> > > > > > > > > yuzhih...@gmail.com > >> > > > > > > > > > > > >> > > > > > > > > > > >> > wrote: > >> > > > > > > > > > > >> > >> > > > >> > > > > > > > > > > >> > >> > > > +1 > >> > > > > > > > > > > >> > >> > > > -------- Original message > --------From: > >> Kamal > >> > > > > > > > > > Chandraprakash > >> > > > > > > > > > > < > >> > > > > > > > > > > >> > >> > > > kamal.chandraprak...@gmail.com> Date: > >> > > 8/22/18 > >> > > > > > 3:19 > >> > > > > > > AM > >> > > > > > > > > > > >> > (GMT-08:00) > >> > > > > > > > > > > >> > >> > To: > >> > > > > > > > > > > >> > >> > > > dev@kafka.apache.org Subject: Re: > >> [VOTE] > >> > > > > KIP-336: > >> > > > > > > > > > > Consolidate > >> > > > > > > > > > > >> > >> > > > ExtendedSerializer/Serializer and > >> > > > > > > > > > > >> > ExtendedDeserializer/Deserializer > >> > > > > > > > > > > >> > >> > > > +1 > >> > > > > > > > > > > >> > >> > > > > >> > > > > > > > > > > >> > >> > > > Thanks for the KIP! > >> > > > > > > > > > > >> > >> > > > > >> > > > > > > > > > > >> > >> > > > On Wed, Aug 22, 2018 at 2:48 PM Viktor > >> > > > > > Somogyi-Vass < > >> > > > > > > > > > > >> > >> > > > viktorsomo...@gmail.com> > >> > > > > > > > > > > >> > >> > > > wrote: > >> > > > > > > > > > > >> > >> > > > > >> > > > > > > > > > > >> > >> > > > > Hi All, > >> > > > > > > > > > > >> > >> > > > > > >> > > > > > > > > > > >> > >> > > > > I'd like to start a vote on this > KIP ( > >> > > > > > > > > > > >> > >> > > > > > >> > > > > > https://cwiki.apache.org/confluence/pages/viewpage > >> > > > > > > . > >> > > > > > > > > > > >> > >> > > > action?pageId=87298242) > >> > > > > > > > > > > >> > >> > > > > which aims to refactor > >> > > > > > > ExtendedSerializer/Serializer > >> > > > > > > > > and > >> > > > > > > > > > > >> > >> > > > > ExtendedDeserializer/Deserializer. > >> > > > > > > > > > > >> > >> > > > > > >> > > > > > > > > > > >> > >> > > > > To summarize what's the motivation: > >> > > > > > > > > > > >> > >> > > > > > >> > > > > > > > > > > >> > >> > > > > When headers were introduced by > >> KIP-82 the > >> > > > > > > > > > > ExtendedSerializer > >> > > > > > > > > > > >> > and > >> > > > > > > > > > > >> > >> > > > > ExtendedDeserializer classes were > >> created > >> > > in > >> > > > > > order > >> > > > > > > to > >> > > > > > > > > > keep > >> > > > > > > > > > > >> > >> interface > >> > > > > > > > > > > >> > >> > > > > compatibility but still add `T > >> > > > > deserialize(String > >> > > > > > > > > topic, > >> > > > > > > > > > > >> Headers > >> > > > > > > > > > > >> > >> > > headers, > >> > > > > > > > > > > >> > >> > > > > byte[] data);` and `byte[] > >> serialize(String > >> > > > > > topic, > >> > > > > > > > > > Headers > >> > > > > > > > > > > >> > >> headers, T > >> > > > > > > > > > > >> > >> > > > > data);` methods that consume the > >> headers > >> > > for > >> > > > > > > > > > > >> > >> > > > serialization/deserialization. > >> > > > > > > > > > > >> > >> > > > > The reason for doing so was that > >> Kafka at > >> > > > that > >> > > > > > time > >> > > > > > > > > > needed > >> > > > > > > > > > > be > >> > > > > > > > > > > >> > >> > > compatbile > >> > > > > > > > > > > >> > >> > > > > with Java 7. Since we're not > >> compiling on > >> > > > Java > >> > > > > 7 > >> > > > > > > > > anymore > >> > > > > > > > > > > >> > >> (KAFKA-4423) > >> > > > > > > > > > > >> > >> > > > we'll > >> > > > > > > > > > > >> > >> > > > > try consolidate the way we're using > >> these > >> > > in > >> > > > a > >> > > > > > > > backward > >> > > > > > > > > > > >> > compatible > >> > > > > > > > > > > >> > >> > > > fashion: > >> > > > > > > > > > > >> > >> > > > > deprecating the Extended* classes > and > >> > > moving > >> > > > > the > >> > > > > > > > > > > >> aforementioned > >> > > > > > > > > > > >> > >> > methods > >> > > > > > > > > > > >> > >> > > > up > >> > > > > > > > > > > >> > >> > > > > in the class hierarchy. > >> > > > > > > > > > > >> > >> > > > > > >> > > > > > > > > > > >> > >> > > > > I'd be happy to get votes or > >> additional > >> > > > > feedback > >> > > > > > on > >> > > > > > > > > this. > >> > > > > > > > > > > >> > >> > > > > > >> > > > > > > > > > > >> > >> > > > > Viktor > >> > > > > > > > > > > >> > >> > > > > > >> > > > > > > > > > > >> > >> > > > > >> > > > > > > > > > > >> > >> > > > >> > > > > > > > > > > >> > >> > > >> > > > > > > > > > > >> > >> > >> > > > > > > > > > > >> > > > >> > > > > > > > > > > >> > > >> > > > > > > > > > > >> > >> > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >