Hey Guozhang, thanks for the suggestion. Could you elaborate more on why defining a direct consumer API would be easier? The benefit of reusing consumer rebalance listener is to consolidate the entry point of consumer internal states. Compared with letting consumer generate a deep-copy of metadata every time we call #sendOffsetsToTransactions, using a callback seems reducing unnecessary updates towards the metadata. WDYT?
Boyang On Tue, Aug 13, 2019 at 2:14 PM Guozhang Wang <wangg...@gmail.com> wrote: > Hi Boyang, Jason, > > If we are going to expose the generation id / group.instance id etc anyways > I think its slightly better to just add a new API on KafkaConsumer > returning the ConsumerGroupMetadata (option 3) than passing it in on an > additional callback of ConsumerRebalanceListener. > It feels easier to leverage, than requiring users to pass in the listener. > > Guozhang > > On Mon, Aug 12, 2019 at 3:41 PM Boyang Chen <reluctanthero...@gmail.com> > wrote: > > > Thanks Jason, the intuition behind defining a separate callback function > is > > that, with KIP-429 we no longer guarantee to call OnPartitionsAssigned() > or > > OnPartitionsRevoked() with each rebalance. Our requirement is to be > > up-to-date with group metadata such as generation information, so > callback > > like onGroupJoined() would make more sense as it should be invoked after > > every successful rebalance. > > > > Best, > > Boyang > > > > On Mon, Aug 12, 2019 at 2:02 PM Jason Gustafson <ja...@confluent.io> > > wrote: > > > > > Hey Boyang, > > > > > > I favor option 4 as well. It's a little more cumbersome than 3 for this > > use > > > case, but it seems like a cleaner separation of concerns. The rebalance > > > listener is already concerned with events affecting the assignment > > > lifecycle and group membership. I think the only thing I'm wondering is > > > whether it should be a separate callback as you've suggested, or if it > > > would make sense to overload `onPartitionsAssigned`. If it's separate, > > > maybe a name like `onGroupJoined` would be clearer? > > > > > > Thanks, > > > Jason > > > > > > > > > > > > On Thu, Aug 8, 2019 at 10:59 PM Boyang Chen < > reluctanthero...@gmail.com> > > > wrote: > > > > > > > Thank you Jason. We had some offline discussion on properly keeping > > group > > > > metadata up to date, and here are some of our options brainstormed: > > > > 1. Let the caller of `sendOffsetsToTransaction(offset, metadata)` > > > maintain > > > > the ever-changing group metadata. This could be done on stream side, > > but > > > > for non-stream EOS the sample code will become complicated as the > user > > > > needs to implement the partition assignor interface to get the update > > > from > > > > `onAssignment` > > > > > > > > 2. Get a new API on producer like `refreshGroupMetadata(metadata)`. > > This > > > is > > > > similar to option 1 except that now in the partition assignor > callback > > we > > > > could straightly pass in the producer instance, which simplifies the > > > > non-stream EOS, however this new API seems weird to define on > producer. > > > > > > > > 3. Make an accessing interface to group metadata, or just expose the > > > group > > > > metadata through a consumer API like `consumer.GroupMetadata()`. This > > is > > > > the old way which avoids the users’ effort to implement partition > > > assignor > > > > directly. > > > > > > > > 4. Expose the group metadata through rebalance listener, which is a > > more > > > > well-known and adopted callback interface. We could do sth like > > > > `onGroupMetadataUpdated(ConsumerGroupMetadata metadata)` > > > > > > > > To simplify the code logic, we believe option 3 & 4 are better > > solutions, > > > > and of which I slightly prefer option 4 as it is the most clean > > solution > > > > with less intrusion to both consumer and producer APIs. > > > > > > > > WDYT? > > > > > > > > Boyang > > > > > > > > > > > > > > > > > > > > On Wed, Aug 7, 2019 at 9:20 AM Jason Gustafson <ja...@confluent.io> > > > wrote: > > > > > > > > > Hi Boyang, > > > > > > > > > > > We already persist member.id, instance.id and generation.id in > the > > > > > offset > > > > > topic, what extra fields we need to store? > > > > > > > > > > Yeah, you're right. I was a little confused and thought this > > > information > > > > > was needed by the transaction coordinator. > > > > > > > > > > > This should be easily done on the stream side as we have > > > > > StreamsPartitionAssignor to reflect metadata changes upon > > > > #onAssignment(), > > > > > but non-stream user has to code the callback by hand, do you think > > the > > > > > convenience we sacrifice here worth the simplification benefit? > > > > > > > > > > Either way, you need a reference to the consumer. I was mostly just > > > > > thinking it would be better to reduce the integration point to its > > > > minimum. > > > > > Have you thought through the implications of needing to keep > around a > > > > > reference to the consumer in the producer? What if it gets closed? > It > > > > seems > > > > > better not to have to think about these cases. > > > > > > > > > > -Jason > > > > > > > > > > On Tue, Aug 6, 2019 at 9:53 PM Boyang Chen < > > reluctanthero...@gmail.com > > > > > > > > > wrote: > > > > > > > > > > > Thank you for the suggestions Jason. And a side note for > Guozhang, > > I > > > > > > updated the KIP to reflect the dependency on 447. > > > > > > > > > > > > On Tue, Aug 6, 2019 at 11:35 AM Jason Gustafson < > > ja...@confluent.io> > > > > > > wrote: > > > > > > > > > > > > > Hi Boyang, thanks for the updates. I have a few more comments: > > > > > > > > > > > > > > 1. We are adding some new fields to TxnOffsetCommit to support > > > > > > group-based > > > > > > > fencing. Do we need these fields to be persisted in the offsets > > > topic > > > > > to > > > > > > > ensure that the fencing still works after a coordinator > failover? > > > > > > > > > > > > > > We already persist member.id, instance.id and generation.id in > > the > > > > > > offset > > > > > > topic, what extra fields we need to store? > > > > > > > > > > > > > > > > > > > 2. Since you are proposing a new `groupMetadata` API, have you > > > > > considered > > > > > > > whether we still need the `initTransactions` overload? Another > > way > > > > > would > > > > > > be > > > > > > > to pass it through the `sendOffsetsToTransaction` API: > > > > > > > > > > > > > > void sendOffsetsToTransaction(Map<TopicPartition, > > > OffsetAndMetadata> > > > > > > > offsets, GroupMetadata groupMetadata) throws > > > > > > > ProducerFencedException, IllegalGenerationException; > > > > > > > > > > > > > > This seems a little more consistent with the current API and > > avoids > > > > the > > > > > > > direct dependence on the Consumer in the producer. > > > > > > > > > > > > > > Note that although we avoid one dependency to consumer, > producer > > > > needs > > > > > to > > > > > > periodically update > > > > > > its group metadata, or in this case the caller of > > > > > > *sendOffsetsToTransaction(Map<TopicPartition, > > > > > > OffsetAndMetadata>* > > > > > > *offsets, GroupMetadata groupMetadata) *is responsible for > getting > > > the > > > > > > latest value of group metadata. > > > > > > This should be easily done on the stream side as we have > > > > > > StreamsPartitionAssignor to reflect metadata changes upon > > > > > #onAssignment(), > > > > > > but non-stream user has to code the callback by hand, do you > think > > > the > > > > > > convenience we sacrifice here worth the simplification benefit? > > > > > > > > > > > > > > > > > > > 3. Can you clarify the behavior of the clients when the brokers > > do > > > > not > > > > > > > support the latest API versions? This is both for the new > > > > > TxnOffsetCommit > > > > > > > and the OffsetFetch APIs. I guess the high level idea in > streams > > is > > > > to > > > > > > > detect broker support before instantiating the producer and > > > > consumer. I > > > > > > > think that's reasonable, but we might need some approach for > > > > > non-streams > > > > > > > use cases. One option I was considering is enforcing the latest > > > > version > > > > > > > through the new `sendOffsetsToTransaction` API. Basically when > > you > > > > use > > > > > > the > > > > > > > new API, we require support for the latest TxnOffsetCommit > > version. > > > > > This > > > > > > > puts some burden on users, but it avoids breaking correctness > > > > > assumptions > > > > > > > when the new APIs are in use. What do you think? > > > > > > > > > > > > > Yes, I think we haven't covered this case, so the plan is to > crash > > > the > > > > > > non-stream application when the job is using new sendOffsets API. > > > > > > > > > > > > > > > > > > > > -Jason > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Mon, Aug 5, 2019 at 6:06 PM Boyang Chen < > > > > reluctanthero...@gmail.com > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > Yep, Guozhang I think that would be best as passing in an > > entire > > > > > > consumer > > > > > > > > instance is indeed cumbersome. > > > > > > > > > > > > > > > > Just saw you updated KIP-429, I will follow-up to change 447 > as > > > > well. > > > > > > > > > > > > > > > > Best, > > > > > > > > Boyang > > > > > > > > > > > > > > > > On Mon, Aug 5, 2019 at 3:18 PM Guozhang Wang < > > wangg...@gmail.com > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > okay I think I understand your concerns about > > > > ConsumerGroupMetadata > > > > > > > now: > > > > > > > > if > > > > > > > > > we still want to only call initTxns once, then we should > > allow > > > > the > > > > > > > > whatever > > > > > > > > > passed-in parameter to reflect the latest value of > generation > > > id > > > > > > > whenever > > > > > > > > > sending the offset fetch request. > > > > > > > > > > > > > > > > > > Whereas the current ConsumerGroupMetadata is a static > object. > > > > > > > > > > > > > > > > > > Maybe we can consider having an extended class of > > > > > > ConsumerGroupMetadata > > > > > > > > > whose values are updated from the consumer's rebalance > > > callback? > > > > > > > > > > > > > > > > > > > > > > > > > > > Guozhang > > > > > > > > > > > > > > > > > > > > > > > > > > > On Mon, Aug 5, 2019 at 9:26 AM Boyang Chen < > > > > > > reluctanthero...@gmail.com > > > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > Thank you Guozhang for the reply! I'm curious whether > > KIP-429 > > > > has > > > > > > > > > reflected > > > > > > > > > > the latest change on ConsumerGroupMetadata? Also > regarding > > > > > question > > > > > > > > one, > > > > > > > > > > the group metadata needs to be accessed via callback, > does > > > that > > > > > > mean > > > > > > > we > > > > > > > > > > need a separate producer API such like > > > > > > > > > > "producer.refreshMetadata(groupMetadata)" to be able to > > > access > > > > it > > > > > > > > instead > > > > > > > > > > of passing in the consumer instance? > > > > > > > > > > > > > > > > > > > > Boyang > > > > > > > > > > > > > > > > > > > > On Fri, Aug 2, 2019 at 4:36 PM Guozhang Wang < > > > > wangg...@gmail.com > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > Thanks Boyang, > > > > > > > > > > > > > > > > > > > > > > I've made another pass on KIP-447 as well as > > > > > > > > > > > https://github.com/apache/kafka/pull/7078, and have > some > > > > minor > > > > > > > > > comments > > > > > > > > > > > about the proposed API: > > > > > > > > > > > > > > > > > > > > > > 1. it seems instead of needing the whole KafkaConsumer > > > > object, > > > > > > > you'd > > > > > > > > > only > > > > > > > > > > > need the "ConsumerGroupMetadata", in that case can we > > just > > > > pass > > > > > > in > > > > > > > > that > > > > > > > > > > > object into the initTxns call? > > > > > > > > > > > > > > > > > > > > > > 2. the current trunk already has a public class named > > > > > > > > > > > (ConsumerGroupMetadata) > > > > > > > > > > > under o.a.k.clients.consumer created by KIP-429. If we > > want > > > > to > > > > > > just > > > > > > > > use > > > > > > > > > > > that then maybe it makes less sense to declare a base > > > > > > GroupMetadata > > > > > > > > as > > > > > > > > > we > > > > > > > > > > > are already leaking such information on the assignor > > > anyways. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Guozhang > > > > > > > > > > > > > > > > > > > > > > On Tue, Jul 30, 2019 at 1:55 PM Boyang Chen < > > > > > > > > > reluctanthero...@gmail.com> > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > Thank you Guozhang for the reply. We will consider > the > > > > > > interface > > > > > > > > > change > > > > > > > > > > > > from 429 as a backup plan for 447. > > > > > > > > > > > > > > > > > > > > > > > > And bumping this thread for more discussion. > > > > > > > > > > > > > > > > > > > > > > > > On Mon, Jul 22, 2019 at 6:28 PM Guozhang Wang < > > > > > > > wangg...@gmail.com> > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > On Sat, Jul 20, 2019 at 9:50 AM Boyang Chen < > > > > > > > > > > > reluctanthero...@gmail.com> > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > Thank you Guozhang for the suggestion! I would > > > normally > > > > > > > prefer > > > > > > > > > > > naming a > > > > > > > > > > > > > > flag corresponding to its functionality. Seems to > > me > > > > > > > > > > > `isolation_level` > > > > > > > > > > > > > > makes us another hop on information track. > > > > > > > > > > > > > > > > > > > > > > > > > > > > Fair enough, let's use a separate flag name then > :) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > As for the generation.id exposure, I'm fine > > > leveraging > > > > > the > > > > > > > new > > > > > > > > > API > > > > > > > > > > > > from > > > > > > > > > > > > > > 429, but however is that design finalized yet, > and > > > > > whether > > > > > > > the > > > > > > > > > API > > > > > > > > > > > will > > > > > > > > > > > > > be > > > > > > > > > > > > > > added on the generic Consumer<K, V> interface? > > > > > > > > > > > > > > > > > > > > > > > > > > > > The current PartitionAssignor is inside > `internals` > > > > > package > > > > > > > and > > > > > > > > > in > > > > > > > > > > > > > KIP-429 > > > > > > > > > > > > > we are going to create a new interface out of > > > `internals` > > > > > to > > > > > > > > really > > > > > > > > > > > make > > > > > > > > > > > > it > > > > > > > > > > > > > public APIs, and as part of that we are refactoring > > > some > > > > of > > > > > > its > > > > > > > > > > method > > > > > > > > > > > > > signatures. I just feel some of the newly > introduced > > > > > classes > > > > > > > can > > > > > > > > be > > > > > > > > > > > > reused > > > > > > > > > > > > > in your KIP as well, i.e. just for code > succinctness, > > > but > > > > > no > > > > > > > > > > semantical > > > > > > > > > > > > > indications. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Boyang > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Fri, Jul 19, 2019 at 3:57 PM Guozhang Wang < > > > > > > > > > wangg...@gmail.com> > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Boyang, thanks for the updated proposal! > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 3.a. As Jason mentioned, with EOS enabled we > > still > > > > need > > > > > > to > > > > > > > > > > augment > > > > > > > > > > > > the > > > > > > > > > > > > > > > offset fetch request with a boolean to indicate > > > "give > > > > > me > > > > > > an > > > > > > > > > > > retriable > > > > > > > > > > > > > > error > > > > > > > > > > > > > > > code if there's pending offset, rather than > > sending > > > > me > > > > > > the > > > > > > > > > > > committed > > > > > > > > > > > > > > offset > > > > > > > > > > > > > > > immediately". Personally I still feel it is > okay > > to > > > > > > > > piggy-back > > > > > > > > > on > > > > > > > > > > > the > > > > > > > > > > > > > > > ISOLATION_LEVEL boolean, but I'm also fine with > > > > another > > > > > > > > > > > > > > `await_transaction` > > > > > > > > > > > > > > > boolean if you feel strongly about it. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 10. About the exposure of generation id, there > > may > > > be > > > > > > some > > > > > > > > > > > > refactoring > > > > > > > > > > > > > > work > > > > > > > > > > > > > > > coming from KIP-429 that can benefit KIP-447 as > > > well > > > > > > since > > > > > > > we > > > > > > > > > are > > > > > > > > > > > > > > wrapping > > > > > > > > > > > > > > > the consumer subscription / assignment data in > > new > > > > > > classes. > > > > > > > > > Note > > > > > > > > > > > that > > > > > > > > > > > > > > > current proposal does not `generationId` since > > with > > > > the > > > > > > > > > > cooperative > > > > > > > > > > > > > > sticky > > > > > > > > > > > > > > > assignor we think it is not necessary for > > > > correctness, > > > > > > but > > > > > > > > also > > > > > > > > > > if > > > > > > > > > > > we > > > > > > > > > > > > > > agree > > > > > > > > > > > > > > > it is okay to expose it we can potentially > > include > > > it > > > > > in > > > > > > > > > > > > > > > `ConsumerAssignmentData` as well. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Guozhang > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Thu, Jul 18, 2019 at 3:55 PM Boyang Chen < > > > > > > > > > > > > > reluctanthero...@gmail.com> > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Thank you Jason for the ideas. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Mon, Jul 15, 2019 at 5:28 PM Jason > > Gustafson < > > > > > > > > > > > > ja...@confluent.io> > > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Hi Boyang, > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks for the updates. A few comments > below: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 1. The KIP mentions that ` > > > transaction.timeout.ms > > > > ` > > > > > > > should > > > > > > > > > be > > > > > > > > > > > > > reduced > > > > > > > > > > > > > > to > > > > > > > > > > > > > > > > > 10s. > > > > > > > > > > > > > > > > > I think this makes sense for Kafka Streams > > > which > > > > is > > > > > > > tied > > > > > > > > to > > > > > > > > > > the > > > > > > > > > > > > > > > consumer > > > > > > > > > > > > > > > > > group semantics and uses a default 10s > > session > > > > > > timeout. > > > > > > > > > > > However, > > > > > > > > > > > > it > > > > > > > > > > > > > > > > seems a > > > > > > > > > > > > > > > > > bit dangerous to make this change for the > > > > producer > > > > > > > > > generally. > > > > > > > > > > > > Could > > > > > > > > > > > > > > we > > > > > > > > > > > > > > > > just > > > > > > > > > > > > > > > > > change it for streams? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > That sounds good to me. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 2. The new `initTransactions` API takes a > > > > > `Consumer` > > > > > > > > > > instance. > > > > > > > > > > > I > > > > > > > > > > > > > > think > > > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > idea is to basically put in a backdoor to > > give > > > > the > > > > > > > > producer > > > > > > > > > > > > access > > > > > > > > > > > > > to > > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > group generationId. It's not clear to me > how > > > this > > > > > > would > > > > > > > > > work > > > > > > > > > > > > given > > > > > > > > > > > > > > > > package > > > > > > > > > > > > > > > > > restrictions. I wonder if it would be > better > > to > > > > > just > > > > > > > > expose > > > > > > > > > > the > > > > > > > > > > > > > state > > > > > > > > > > > > > > > we > > > > > > > > > > > > > > > > > need from the consumer. I know we have been > > > > > reluctant > > > > > > > to > > > > > > > > do > > > > > > > > > > > this > > > > > > > > > > > > so > > > > > > > > > > > > > > far > > > > > > > > > > > > > > > > > because we treat the generationId as an > > > > > > implementation > > > > > > > > > > detail. > > > > > > > > > > > > > > > However, I > > > > > > > > > > > > > > > > > think we might just bite the bullet and > > expose > > > it > > > > > > > rather > > > > > > > > > than > > > > > > > > > > > > > coming > > > > > > > > > > > > > > up > > > > > > > > > > > > > > > > > with a messy hack. Concepts such as > memberIds > > > > have > > > > > > > > already > > > > > > > > > > been > > > > > > > > > > > > > > exposed > > > > > > > > > > > > > > > > in > > > > > > > > > > > > > > > > > the AdminClient, so maybe it is not too > bad. > > > > > > > > Alternatively, > > > > > > > > > > we > > > > > > > > > > > > > could > > > > > > > > > > > > > > > use > > > > > > > > > > > > > > > > an > > > > > > > > > > > > > > > > > opaque type. For example: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > // public > > > > > > > > > > > > > > > > > interface GroupMetadata {} > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > // private > > > > > > > > > > > > > > > > > interface ConsumerGroupMetadata { > > > > > > > > > > > > > > > > > final int generationId; > > > > > > > > > > > > > > > > > final String memberId; > > > > > > > > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > // Consumer API > > > > > > > > > > > > > > > > > public GroupMetadata groupMetadata(); > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > I am probably leaning toward just exposing > > the > > > > > state > > > > > > we > > > > > > > > > need. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Yes, also to mention that Kafka Streams use > > > > generic > > > > > > > > > Cosnumer > > > > > > > > > > > API > > > > > > > > > > > > > > which > > > > > > > > > > > > > > > > doesn't have rich > > > > > > > > > > > > > > > > states like a full `KafkaConsumer`. The hack > > will > > > > not > > > > > > > work > > > > > > > > as > > > > > > > > > > > > > expected. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Instead, just exposing the consumer > > > generation.id > > > > > > seems > > > > > > > a > > > > > > > > > way > > > > > > > > > > > > easier > > > > > > > > > > > > > > > work. > > > > > > > > > > > > > > > > We could consolidate > > > > > > > > > > > > > > > > the API and make it > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 3. Given that we are already providing a way > to > > > > > > propagate > > > > > > > > > group > > > > > > > > > > > > state > > > > > > > > > > > > > > > from > > > > > > > > > > > > > > > > > the consumer to the producer, I wonder if > we > > > may > > > > as > > > > > > > well > > > > > > > > > > > include > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > memberId and groupInstanceId. This would > make > > > the > > > > > > > > > validation > > > > > > > > > > we > > > > > > > > > > > > do > > > > > > > > > > > > > > for > > > > > > > > > > > > > > > > > TxnOffsetCommit consistent with > OffsetCommit. > > > If > > > > > for > > > > > > no > > > > > > > > > other > > > > > > > > > > > > > > benefit, > > > > > > > > > > > > > > > at > > > > > > > > > > > > > > > > > least this may help with debugging. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Yes, we could put them into the GroupMetadata > > > > struct. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 4. I like the addition of isolation_level > to > > > the > > > > > > offset > > > > > > > > > > fetch. > > > > > > > > > > > At > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > same > > > > > > > > > > > > > > > > > time, its behavior is a bit inconsistent > with > > > how > > > > > it > > > > > > is > > > > > > > > > used > > > > > > > > > > in > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > consumer generally. There is no reason for > > the > > > > > group > > > > > > > > > > > coordinator > > > > > > > > > > > > to > > > > > > > > > > > > > > > ever > > > > > > > > > > > > > > > > > expose aborted data, so this is mostly > about > > > > > awaiting > > > > > > > > > pending > > > > > > > > > > > > > offset > > > > > > > > > > > > > > > > > commits, not reading uncommitted data. > > Perhaps > > > > > > instead > > > > > > > of > > > > > > > > > > > calling > > > > > > > > > > > > > > this > > > > > > > > > > > > > > > > > "isolation level," it should be more like > > > > > > > > > > > > > "await_pending_transaction" > > > > > > > > > > > > > > > or > > > > > > > > > > > > > > > > > something like that? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Also, just to be clear, the consumer would > > > treat > > > > > this > > > > > > > as > > > > > > > > an > > > > > > > > > > > > > optional > > > > > > > > > > > > > > > > field, > > > > > > > > > > > > > > > > > right? So if the broker does not support > the > > > > latest > > > > > > > > > > OffsetFetch > > > > > > > > > > > > > API, > > > > > > > > > > > > > > it > > > > > > > > > > > > > > > > > would silently revert to reading the old > > data. > > > > > > > Basically > > > > > > > > it > > > > > > > > > > > would > > > > > > > > > > > > > be > > > > > > > > > > > > > > up > > > > > > > > > > > > > > > > to > > > > > > > > > > > > > > > > > the streams version probing logic to ensure > > > that > > > > > the > > > > > > > > > > > expectation > > > > > > > > > > > > on > > > > > > > > > > > > > > > this > > > > > > > > > > > > > > > > > API fits with the usage of ` > transctional.id > > `. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Sounds like a better naming to me, while I > > > think > > > > it > > > > > > > could > > > > > > > > > be > > > > > > > > > > > > > > shortened > > > > > > > > > > > > > > > to > > > > > > > > > > > > > > > > `await_transaction`. > > > > > > > > > > > > > > > > I think the field should be optional, too. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > > Jason > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Mon, Jul 8, 2019 at 3:19 PM Boyang Chen > < > > > > > > > > > > > > > > reluctanthero...@gmail.com > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Hey Guozhang, > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > I will correct my statement from last > > email. > > > I > > > > > > don't > > > > > > > > > think > > > > > > > > > > > the > > > > > > > > > > > > > > > > > > read_committed (3.a) is necessary to be > > added > > > > to > > > > > > the > > > > > > > > > > > > OffsetFetch > > > > > > > > > > > > > > > > request, > > > > > > > > > > > > > > > > > > as if we are using EOS application, the > > > > > underlying > > > > > > > > > > consumers > > > > > > > > > > > > > within > > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > > group should always back off when there > is > > > > > pending > > > > > > > > > offsets. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Let me know if you think this is correct. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Tue, Jul 2, 2019 at 3:21 PM Boyang > Chen > > < > > > > > > > > > > > > > > > reluctanthero...@gmail.com > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Thank you Guozhang for the questions, > > > inline > > > > > > > answers > > > > > > > > > are > > > > > > > > > > > > below. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Tue, Jul 2, 2019 at 3:14 PM Boyang > > Chen > > > < > > > > > > > > > > > > > > > > reluctanthero...@gmail.com > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >> Hey all, > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> I have done a fundamental polish of > > > KIP-447 > > > > > > > > > > > > > > > > > > >> < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://cwiki.apache.org/confluence/display/KAFKA/KIP-447%3A+Producer+scalability+for+exactly+once+semantics > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > and > > > > > > > > > > > > > > > > > > >> written a design doc > > > > > > > > > > > > > > > > > > >> < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://docs.google.com/document/d/1LhzHGeX7_Lay4xvrEXxfciuDWATjpUXQhrEIkph9qRE/edit# > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > depicting > > > > > > > > > > > > > > > > > > >> internal changes. We stripped off many > > > > > > > > implementation > > > > > > > > > > > > details > > > > > > > > > > > > > > from > > > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > > KIP, > > > > > > > > > > > > > > > > > > >> and simplified the public changes by a > > > lot. > > > > > For > > > > > > > > > > reviewers, > > > > > > > > > > > > it > > > > > > > > > > > > > is > > > > > > > > > > > > > > > > > highly > > > > > > > > > > > > > > > > > > >> recommended to fully understand EOS > > design > > > > in > > > > > > > KIP-98 > > > > > > > > > and > > > > > > > > > > > > read > > > > > > > > > > > > > > its > > > > > > > > > > > > > > > > > > >> corresponding design doc > > > > > > > > > > > > > > > > > > >> < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://docs.google.com/document/d/11Jqy_GjUGtdXJK94XGsEIK7CP1SnQGdp2eF0wSw9ra8/edit > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > if > > > > > > > > > > > > > > > > > > >> you haven't done so already. > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> Let me know if you found anything > > > confusing > > > > > > around > > > > > > > > the > > > > > > > > > > KIP > > > > > > > > > > > > or > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > > design. > > > > > > > > > > > > > > > > > > >> Would be happy to discuss in depth. > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> Best, > > > > > > > > > > > > > > > > > > >> Boyang > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> On Wed, Jun 26, 2019 at 11:00 AM > > Guozhang > > > > > Wang < > > > > > > > > > > > > > > > wangg...@gmail.com> > > > > > > > > > > > > > > > > > > >> wrote: > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >>> 2. The reason we did not expose > > > > > generation.id > > > > > > > from > > > > > > > > > > > > > > KafkaConsumer > > > > > > > > > > > > > > > > > > public > > > > > > > > > > > > > > > > > > >>> APIs directly is to abstract this > > notion > > > > from > > > > > > > users > > > > > > > > > > > (since > > > > > > > > > > > > it > > > > > > > > > > > > > > is > > > > > > > > > > > > > > > an > > > > > > > > > > > > > > > > > > >>> implementation detail of the > rebalance > > > > > protocol > > > > > > > > > itself, > > > > > > > > > > > > e.g. > > > > > > > > > > > > > if > > > > > > > > > > > > > > > > user > > > > > > > > > > > > > > > > > > >>> calls > > > > > > > > > > > > > > > > > > >>> consumer.assign() they do not need to > > > > invoke > > > > > > > > > > > > > > ConsumerCoordinator > > > > > > > > > > > > > > > > and > > > > > > > > > > > > > > > > > no > > > > > > > > > > > > > > > > > > >>> need to be aware of generation.id at > > > all). > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > >>> On the other hand, with the current > > > > proposal > > > > > > the > > > > > > > > > > > > > > txn.coordiantor > > > > > > > > > > > > > > > > did > > > > > > > > > > > > > > > > > > not > > > > > > > > > > > > > > > > > > >>> know about the latest generation from > > the > > > > > > > > > > source-of-truth > > > > > > > > > > > > > > > > > > >>> group.coordinator; instead, it will > > only > > > > bump > > > > > > up > > > > > > > > the > > > > > > > > > > > > > generation > > > > > > > > > > > > > > > > from > > > > > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > > >>> producer's InitProducerIdRequest > only. > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > >>> The key here is that > GroupCoordinator, > > > when > > > > > > > > handling > > > > > > > > > > > > > > > > > > >>> `InitProducerIdRequest > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > >> In the new design, we just pass the > > entire > > > > > > > consumer > > > > > > > > > > > instance > > > > > > > > > > > > > > into > > > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > > > producer through > > > > > > > > > > > > > > > > > > > #initTransaction, so no public API will > > be > > > > > > created. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >> 3. I agree that if we rely on the > group > > > > > > > coordinator > > > > > > > > to > > > > > > > > > > > block > > > > > > > > > > > > > on > > > > > > > > > > > > > > > > > > returning > > > > > > > > > > > > > > > > > > >>> offset-fetch-response if > read-committed > > > is > > > > > > > enabled, > > > > > > > > > > then > > > > > > > > > > > we > > > > > > > > > > > > > do > > > > > > > > > > > > > > > not > > > > > > > > > > > > > > > > > need > > > > > > > > > > > > > > > > > > >>> to > > > > > > > > > > > > > > > > > > >>> store partition assignment on txn > > > > coordinator > > > > > > and > > > > > > > > > > > therefore > > > > > > > > > > > > > > it's > > > > > > > > > > > > > > > > > better > > > > > > > > > > > > > > > > > > >>> to > > > > > > > > > > > > > > > > > > >>> still decouple them. For that case we > > > still > > > > > > need > > > > > > > to > > > > > > > > > > > update > > > > > > > > > > > > > the > > > > > > > > > > > > > > > KIP > > > > > > > > > > > > > > > > > wiki > > > > > > > > > > > > > > > > > > >>> page that includes: > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > >>> 3.a. Augment OffsetFetchRequest with > > the > > > > > > > > > > ISOLATION_LEVEL > > > > > > > > > > > as > > > > > > > > > > > > > > well. > > > > > > > > > > > > > > > > > > >>> 3.b. Add new error code in > > > > > OffsetFetchResponse > > > > > > to > > > > > > > > let > > > > > > > > > > > > client > > > > > > > > > > > > > > > > backoff > > > > > > > > > > > > > > > > > > and > > > > > > > > > > > > > > > > > > >>> retry if there are pending txns > > including > > > > the > > > > > > > > > > interested > > > > > > > > > > > > > > > > partitions. > > > > > > > > > > > > > > > > > > >>> 3.c. Also in the worst case we would > > let > > > > the > > > > > > > client > > > > > > > > > be > > > > > > > > > > > > > blocked > > > > > > > > > > > > > > > for > > > > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > > >>> txn.timeout period, and for that > > > rationale > > > > we > > > > > > may > > > > > > > > > need > > > > > > > > > > to > > > > > > > > > > > > > > > consider > > > > > > > > > > > > > > > > > > >>> reducing > > > > > > > > > > > > > > > > > > >>> our default txn.timeout value as > well. > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > >>> Addressed 3.b and 3.c, will do 3.a. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >> 4. According to Colin it seems we do > not > > > > need > > > > > to > > > > > > > > > create > > > > > > > > > > > > > another > > > > > > > > > > > > > > > KIP > > > > > > > > > > > > > > > > > and > > > > > > > > > > > > > > > > > > we > > > > > > > > > > > > > > > > > > >>> can just complete it as part of > > KIP-117 / > > > > > > > > KAFKA-5214; > > > > > > > > > > and > > > > > > > > > > > > we > > > > > > > > > > > > > > need > > > > > > > > > > > > > > > > to > > > > > > > > > > > > > > > > > do > > > > > > > > > > > > > > > > > > >>> some cleanup to have BrokerApiVersion > > > > exposed > > > > > > > from > > > > > > > > > > > > > AdminClient > > > > > > > > > > > > > > > > > (@Colin > > > > > > > > > > > > > > > > > > >>> please let use know if you have any > > > > concerns > > > > > > > > exposing > > > > > > > > > > > it). > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > >> I think we no longer need to rely on > api > > > > > version > > > > > > > for > > > > > > > > > > > > > > > initialization, > > > > > > > > > > > > > > > > > > > since we will be using the upgrade.from > > > > config > > > > > > > > anyway. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >>> Guozhang > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > >>> On Tue, Jun 25, 2019 at 6:43 PM Jason > > > > > > Gustafson < > > > > > > > > > > > > > > > > ja...@confluent.io> > > > > > > > > > > > > > > > > > > >>> wrote: > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > >>> > For reference, we have > > > > > > BrokerApiVersionCommand > > > > > > > > > > already > > > > > > > > > > > > as a > > > > > > > > > > > > > > > > public > > > > > > > > > > > > > > > > > > >>> > interface. We have a bit of tech > debt > > > at > > > > > the > > > > > > > > moment > > > > > > > > > > > > because > > > > > > > > > > > > > > it > > > > > > > > > > > > > > > > > uses a > > > > > > > > > > > > > > > > > > >>> > custom AdminClient. It would be > nice > > to > > > > > clean > > > > > > > > that > > > > > > > > > > up. > > > > > > > > > > > In > > > > > > > > > > > > > > > > general, > > > > > > > > > > > > > > > > > I > > > > > > > > > > > > > > > > > > >>> think > > > > > > > > > > > > > > > > > > >>> > it is reasonable to expose from > > > > > AdminClient. > > > > > > It > > > > > > > > can > > > > > > > > > > be > > > > > > > > > > > > used > > > > > > > > > > > > > > by > > > > > > > > > > > > > > > > > > >>> management > > > > > > > > > > > > > > > > > > >>> > tools to inspect running Kafka > > versions > > > > for > > > > > > > > > example. > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > >>> > -Jason > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > >>> > On Tue, Jun 25, 2019 at 4:37 PM > > Boyang > > > > > Chen < > > > > > > > > > > > > > > > > > > >>> reluctanthero...@gmail.com> > > > > > > > > > > > > > > > > > > >>> > wrote: > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > >>> > > Thank you for the context Colin. > > The > > > > > > groupId > > > > > > > > was > > > > > > > > > > > > indeed a > > > > > > > > > > > > > > > > > > copy-paste > > > > > > > > > > > > > > > > > > >>> > error. > > > > > > > > > > > > > > > > > > >>> > > Our use case here for 447 is > > (Quoted > > > > from > > > > > > > > > > Guozhang): > > > > > > > > > > > > > > > > > > >>> > > ''' > > > > > > > > > > > > > > > > > > >>> > > I think if we can do something > else > > > to > > > > > > > > > > > > > > > > > > >>> > > avoid this config though, for > > example > > > > we > > > > > > can > > > > > > > > use > > > > > > > > > > the > > > > > > > > > > > > > > embedded > > > > > > > > > > > > > > > > > > >>> AdminClient > > > > > > > > > > > > > > > > > > >>> > > to send the APIVersion request > upon > > > > > > starting > > > > > > > > up, > > > > > > > > > > and > > > > > > > > > > > > > based > > > > > > > > > > > > > > on > > > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > > >>> > returned > > > > > > > > > > > > > > > > > > >>> > > value decides whether to go to > the > > > old > > > > > code > > > > > > > > path > > > > > > > > > or > > > > > > > > > > > the > > > > > > > > > > > > > new > > > > > > > > > > > > > > > > > > behavior. > > > > > > > > > > > > > > > > > > >>> > > ''' > > > > > > > > > > > > > > > > > > >>> > > The benefit we get is to avoid > > > adding a > > > > > new > > > > > > > > > > > > configuration > > > > > > > > > > > > > > to > > > > > > > > > > > > > > > > > make a > > > > > > > > > > > > > > > > > > >>> > > decision simply base on broker > > > version. > > > > > If > > > > > > > you > > > > > > > > > have > > > > > > > > > > > > > > concerns > > > > > > > > > > > > > > > > with > > > > > > > > > > > > > > > > > > >>> > exposing > > > > > > > > > > > > > > > > > > >>> > > ApiVersion for client, we could > > > > > > > > > > > > > > > > > > >>> > > try to think of alternative > > solutions > > > > > too. > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > >>> > > Boyang > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > >>> > > On Tue, Jun 25, 2019 at 4:20 PM > > Colin > > > > > > McCabe > > > > > > > < > > > > > > > > > > > > > > > > cmcc...@apache.org > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >>> wrote: > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > >>> > > > kafka.api.ApiVersion is an > > internal > > > > > > class, > > > > > > > > not > > > > > > > > > > > > suitable > > > > > > > > > > > > > > to > > > > > > > > > > > > > > > > > > exposing > > > > > > > > > > > > > > > > > > >>> > > > through AdminClient. That > class > > is > > > > not > > > > > > > even > > > > > > > > > > > > accessible > > > > > > > > > > > > > > > > without > > > > > > > > > > > > > > > > > > >>> having > > > > > > > > > > > > > > > > > > >>> > > the > > > > > > > > > > > > > > > > > > >>> > > > broker jars on your CLASSPATH. > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > >>> > > > Another question is, what is > the > > > > > groupId > > > > > > > > > > parameter > > > > > > > > > > > > > doing > > > > > > > > > > > > > > in > > > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > > >>> call? > > > > > > > > > > > > > > > > > > >>> > > The > > > > > > > > > > > > > > > > > > >>> > > > API versions are the same no > > matter > > > > > what > > > > > > > > > consumer > > > > > > > > > > > > group > > > > > > > > > > > > > > we > > > > > > > > > > > > > > > > use, > > > > > > > > > > > > > > > > > > >>> right? > > > > > > > > > > > > > > > > > > >>> > > > Perhaps this was a copy and > paste > > > > > error? > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > >>> > > > This is not the first time we > > have > > > > > > > discussed > > > > > > > > > > > having a > > > > > > > > > > > > > > > method > > > > > > > > > > > > > > > > in > > > > > > > > > > > > > > > > > > >>> > > > AdminClient to retrieve API > > version > > > > > > > > > information. > > > > > > > > > > > In > > > > > > > > > > > > > > fact, > > > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > > >>> original > > > > > > > > > > > > > > > > > > >>> > > KIP > > > > > > > > > > > > > > > > > > >>> > > > which created KafkaAdminClient > > > > > specified > > > > > > an > > > > > > > > API > > > > > > > > > > for > > > > > > > > > > > > > > > fetching > > > > > > > > > > > > > > > > > > >>> version > > > > > > > > > > > > > > > > > > >>> > > > information. It was called > > > > apiVersions > > > > > > and > > > > > > > > it > > > > > > > > > is > > > > > > > > > > > > still > > > > > > > > > > > > > > > there > > > > > > > > > > > > > > > > > on > > > > > > > > > > > > > > > > > > >>> the > > > > > > > > > > > > > > > > > > >>> > > wiki. > > > > > > > > > > > > > > > > > > >>> > > > See > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://cwiki.apache.org/confluence/display/KAFKA/KIP-117%3A+Add+a+public+AdminClient+API+for+Kafka+admin+operations > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > >>> > > > However, this API wasn't ready > in > > > > time > > > > > > for > > > > > > > > > 0.11.0 > > > > > > > > > > > so > > > > > > > > > > > > we > > > > > > > > > > > > > > > > shipped > > > > > > > > > > > > > > > > > > >>> without > > > > > > > > > > > > > > > > > > >>> > > > it. There was a JIRA to > > implement > > > it > > > > > for > > > > > > > > later > > > > > > > > > > > > > versions, > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > https://issues.apache.org/jira/browse/KAFKA-5214 > > > > > > > > > > , > > > > > > > > > > > > as > > > > > > > > > > > > > > well > > > > > > > > > > > > > > > > as > > > > > > > > > > > > > > > > > a > > > > > > > > > > > > > > > > > > >>> PR, > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > https://github.com/apache/kafka/pull/3012 > > > > > > > . > > > > > > > > > > > > However, > > > > > > > > > > > > > we > > > > > > > > > > > > > > > > > started > > > > > > > > > > > > > > > > > > >>> to > > > > > > > > > > > > > > > > > > >>> > > > rethink whether this > AdminClient > > > > > function > > > > > > > was > > > > > > > > > > even > > > > > > > > > > > > > > > necessary. > > > > > > > > > > > > > > > > > > >>> Most of > > > > > > > > > > > > > > > > > > >>> > > the > > > > > > > > > > > > > > > > > > >>> > > > use-cases we could think of > > seemed > > > > like > > > > > > > > > horrible > > > > > > > > > > > > hacks. > > > > > > > > > > > > > > So > > > > > > > > > > > > > > > > it > > > > > > > > > > > > > > > > > > has > > > > > > > > > > > > > > > > > > >>> > never > > > > > > > > > > > > > > > > > > >>> > > > really been implemented (yet?). > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > >>> > > > best, > > > > > > > > > > > > > > > > > > >>> > > > Colin > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > >>> > > > On Tue, Jun 25, 2019, at 15:46, > > > > Boyang > > > > > > Chen > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > >>> > > > > Actually, after a second > > > thought, I > > > > > > think > > > > > > > > it > > > > > > > > > > > > actually > > > > > > > > > > > > > > > makes > > > > > > > > > > > > > > > > > > >>> sense to > > > > > > > > > > > > > > > > > > >>> > > > > support auto upgrade through > > > admin > > > > > > client > > > > > > > > to > > > > > > > > > > help > > > > > > > > > > > > use > > > > > > > > > > > > > > get > > > > > > > > > > > > > > > > api > > > > > > > > > > > > > > > > > > >>> version > > > > > > > > > > > > > > > > > > >>> > > > > from > > > > > > > > > > > > > > > > > > >>> > > > > broker. > > > > > > > > > > > > > > > > > > >>> > > > > A draft KIP is here: > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://cwiki.apache.org/confluence/display/KAFKA/KIP-483%3A++Add+Broker+Version+API+in+Admin+Client > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > Boyang > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > On Tue, Jun 25, 2019 at 2:57 > PM > > > > > Boyang > > > > > > > > Chen < > > > > > > > > > > > > > > > > > > >>> > > reluctanthero...@gmail.com> > > > > > > > > > > > > > > > > > > >>> > > > > wrote: > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > > Thank you Guozhang, some of > > my > > > > > > > > > understandings > > > > > > > > > > > are > > > > > > > > > > > > > > > inline > > > > > > > > > > > > > > > > > > below. > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > > On Tue, Jun 25, 2019 at > 11:05 > > > AM > > > > > > Jason > > > > > > > > > > > Gustafson > > > > > > > > > > > > < > > > > > > > > > > > > > > > > > > >>> > ja...@confluent.io > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > >>> > > > > > wrote: > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > >>> > > > > >> > I think co-locating does > > > have > > > > > some > > > > > > > > > merits > > > > > > > > > > > > here, > > > > > > > > > > > > > > i.e. > > > > > > > > > > > > > > > > > > >>> letting the > > > > > > > > > > > > > > > > > > >>> > > > > >> > ConsumerCoordinator > which > > > has > > > > > the > > > > > > > > > > > > > source-of-truth > > > > > > > > > > > > > > of > > > > > > > > > > > > > > > > > > >>> assignment > > > > > > > > > > > > > > > > > > >>> > to > > > > > > > > > > > > > > > > > > >>> > > > act > > > > > > > > > > > > > > > > > > >>> > > > > >> as > > > > > > > > > > > > > > > > > > >>> > > > > >> > the TxnCoordinator as > > well; > > > > but > > > > > I > > > > > > > > agree > > > > > > > > > > > > there's > > > > > > > > > > > > > > also > > > > > > > > > > > > > > > > > some > > > > > > > > > > > > > > > > > > >>> cons > > > > > > > > > > > > > > > > > > >>> > of > > > > > > > > > > > > > > > > > > >>> > > > > >> coupling > > > > > > > > > > > > > > > > > > >>> > > > > >> > them together. I'm > still a > > > bit > > > > > > > > inclining > > > > > > > > > > > > towards > > > > > > > > > > > > > > > > > > colocation > > > > > > > > > > > > > > > > > > >>> but > > > > > > > > > > > > > > > > > > >>> > if > > > > > > > > > > > > > > > > > > >>> > > > there > > > > > > > > > > > > > > > > > > >>> > > > > >> > are good rationales not > to > > > do > > > > > so I > > > > > > > can > > > > > > > > > be > > > > > > > > > > > > > > convinced > > > > > > > > > > > > > > > as > > > > > > > > > > > > > > > > > > well. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > >>> > > > > >> The good rationale is that > > we > > > > have > > > > > > no > > > > > > > > > > > mechanism > > > > > > > > > > > > to > > > > > > > > > > > > > > > > > colocate > > > > > > > > > > > > > > > > > > >>> > > > partitions ;). > > > > > > > > > > > > > > > > > > >>> > > > > >> Are you suggesting we > store > > > the > > > > > > group > > > > > > > > and > > > > > > > > > > > > > > transaction > > > > > > > > > > > > > > > > > state > > > > > > > > > > > > > > > > > > >>> in the > > > > > > > > > > > > > > > > > > >>> > > > same > > > > > > > > > > > > > > > > > > >>> > > > > >> log? Can you be more > > concrete > > > > > about > > > > > > > the > > > > > > > > > > > benefit? > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > >>> > > > > >> -Jason > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > >>> > > > > >> On Tue, Jun 25, 2019 at > > 10:51 > > > AM > > > > > > > > Guozhang > > > > > > > > > > > Wang < > > > > > > > > > > > > > > > > > > >>> > wangg...@gmail.com> > > > > > > > > > > > > > > > > > > >>> > > > > >> wrote: > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > >>> > > > > >> > Hi Boyang, > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > >>> > > > > >> > 1. One advantage of > retry > > > > > against > > > > > > > > > on-hold > > > > > > > > > > is > > > > > > > > > > > > > that > > > > > > > > > > > > > > it > > > > > > > > > > > > > > > > > will > > > > > > > > > > > > > > > > > > >>> not > > > > > > > > > > > > > > > > > > >>> > > > tie-up a > > > > > > > > > > > > > > > > > > >>> > > > > >> > handler thread (of > course > > > the > > > > > > latter > > > > > > > > > could > > > > > > > > > > > do > > > > > > > > > > > > > the > > > > > > > > > > > > > > > same > > > > > > > > > > > > > > > > > but > > > > > > > > > > > > > > > > > > >>> that > > > > > > > > > > > > > > > > > > >>> > > > involves > > > > > > > > > > > > > > > > > > >>> > > > > >> > using a purgatory which > is > > > > more > > > > > > > > > > > complicated), > > > > > > > > > > > > > and > > > > > > > > > > > > > > > also > > > > > > > > > > > > > > > > > it > > > > > > > > > > > > > > > > > > is > > > > > > > > > > > > > > > > > > >>> > less > > > > > > > > > > > > > > > > > > >>> > > > > >> likely to > > > > > > > > > > > > > > > > > > >>> > > > > >> > violate request timeout. > > So > > > I > > > > > > think > > > > > > > > > there > > > > > > > > > > > are > > > > > > > > > > > > > some > > > > > > > > > > > > > > > > > > >>> rationales to > > > > > > > > > > > > > > > > > > >>> > > > prefer > > > > > > > > > > > > > > > > > > >>> > > > > >> > retries. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > >>> > > > > > That sounds fair to me, > also > > > we > > > > > are > > > > > > > > > avoiding > > > > > > > > > > > > usage > > > > > > > > > > > > > > of > > > > > > > > > > > > > > > > > > another > > > > > > > > > > > > > > > > > > >>> > > > purgatory > > > > > > > > > > > > > > > > > > >>> > > > > > instance. Usually for one > > > > back-off > > > > > > > > > > > > > > > > > > >>> > > > > > we are only delaying 50ms > > > during > > > > > > > startup > > > > > > > > > > which > > > > > > > > > > > is > > > > > > > > > > > > > > > trivial > > > > > > > > > > > > > > > > > > cost. > > > > > > > > > > > > > > > > > > >>> > This > > > > > > > > > > > > > > > > > > >>> > > > > > behavior shouldn't be > > changed. > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > > > 2. Regarding > > > > > > > > "ConsumerRebalanceListener": > > > > > > > > > > > both > > > > > > > > > > > > > > > > > > >>> > > > ConsumerRebalanceListener > > > > > > > > > > > > > > > > > > >>> > > > > >> > and PartitionAssignors > are > > > > > > > > > > user-customizable > > > > > > > > > > > > > > > modules, > > > > > > > > > > > > > > > > > and > > > > > > > > > > > > > > > > > > >>> only > > > > > > > > > > > > > > > > > > >>> > > > > >> difference > > > > > > > > > > > > > > > > > > >>> > > > > >> > is that the former is > > > > specified > > > > > > via > > > > > > > > code > > > > > > > > > > and > > > > > > > > > > > > the > > > > > > > > > > > > > > > > latter > > > > > > > > > > > > > > > > > is > > > > > > > > > > > > > > > > > > >>> > > > specified via > > > > > > > > > > > > > > > > > > >>> > > > > >> > config. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > >>> > > > > >> > Regarding Jason's > proposal > > > of > > > > > > > > > > > > > ConsumerAssignment, > > > > > > > > > > > > > > > one > > > > > > > > > > > > > > > > > > thing > > > > > > > > > > > > > > > > > > >>> to > > > > > > > > > > > > > > > > > > >>> > > note > > > > > > > > > > > > > > > > > > >>> > > > > >> though > > > > > > > > > > > > > > > > > > >>> > > > > >> > with KIP-429 the > > > > > > onPartitionAssigned > > > > > > > > may > > > > > > > > > > not > > > > > > > > > > > > be > > > > > > > > > > > > > > > called > > > > > > > > > > > > > > > > > if > > > > > > > > > > > > > > > > > > >>> the > > > > > > > > > > > > > > > > > > >>> > > > assignment > > > > > > > > > > > > > > > > > > >>> > > > > >> > does not change, whereas > > > > > > > onAssignment > > > > > > > > > > would > > > > > > > > > > > > > always > > > > > > > > > > > > > > > be > > > > > > > > > > > > > > > > > > >>> called at > > > > > > > > > > > > > > > > > > >>> > > the > > > > > > > > > > > > > > > > > > >>> > > > end > > > > > > > > > > > > > > > > > > >>> > > > > >> of > > > > > > > > > > > > > > > > > > >>> > > > > >> > sync-group response. My > > > > proposed > > > > > > > > > semantics > > > > > > > > > > > is > > > > > > > > > > > > > that > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > `RebalanceListener#onPartitionsXXX` > > > > > > > > are > > > > > > > > > > used > > > > > > > > > > > > for > > > > > > > > > > > > > > > > > > >>> notifications > > > > > > > > > > > > > > > > > > >>> > to > > > > > > > > > > > > > > > > > > >>> > > > user, > > > > > > > > > > > > > > > > > > >>> > > > > >> and > > > > > > > > > > > > > > > > > > >>> > > > > >> > hence if there's no > > changes > > > > > these > > > > > > > will > > > > > > > > > not > > > > > > > > > > > be > > > > > > > > > > > > > > > called, > > > > > > > > > > > > > > > > > > >>> whereas > > > > > > > > > > > > > > > > > > >>> > > > > >> > `PartitionAssignor` is > > used > > > > for > > > > > > > > assignor > > > > > > > > > > > > logic, > > > > > > > > > > > > > > > whose > > > > > > > > > > > > > > > > > > >>> callback > > > > > > > > > > > > > > > > > > >>> > > would > > > > > > > > > > > > > > > > > > >>> > > > > >> always > > > > > > > > > > > > > > > > > > >>> > > > > >> > be called no matter if > the > > > > > > > partitions > > > > > > > > > have > > > > > > > > > > > > > changed > > > > > > > > > > > > > > > or > > > > > > > > > > > > > > > > > not. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > >>> > > > > >> I think a third option is > to > > > > > > > gracefully > > > > > > > > > > expose > > > > > > > > > > > > > > > > generation > > > > > > > > > > > > > > > > > id > > > > > > > > > > > > > > > > > > >>> as > > > > > > > > > > > > > > > > > > >>> > part > > > > > > > > > > > > > > > > > > >>> > > > of > > > > > > > > > > > > > > > > > > >>> > > > > > consumer API, so that we > > don't > > > > need > > > > > > to > > > > > > > > > > > > > > > > > > >>> > > > > > bother overloading various > > > > > callbacks. > > > > > > > Of > > > > > > > > > > > course, > > > > > > > > > > > > > this > > > > > > > > > > > > > > > > > builds > > > > > > > > > > > > > > > > > > >>> upon > > > > > > > > > > > > > > > > > > >>> > the > > > > > > > > > > > > > > > > > > >>> > > > > > assumption that topic > > > partitions > > > > > > > > > > > > > > > > > > >>> > > > > > will not be included in new > > > > > > > > initTransaction > > > > > > > > > > > API. > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > > > 3. I feel it is a bit > > awkward > > > > to > > > > > > let > > > > > > > > the > > > > > > > > > > > > > > > TxnCoordinator > > > > > > > > > > > > > > > > > > >>> keeping > > > > > > > > > > > > > > > > > > >>> > > > partition > > > > > > > > > > > > > > > > > > >>> > > > > >> > assignments since it is > > sort > > > > of > > > > > > > taking > > > > > > > > > > over > > > > > > > > > > > > the > > > > > > > > > > > > > > job > > > > > > > > > > > > > > > of > > > > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > > >>> > > > > >> > ConsumerCoordinator, and > > may > > > > > > likely > > > > > > > > > cause > > > > > > > > > > a > > > > > > > > > > > > > > > > split-brain > > > > > > > > > > > > > > > > > > >>> problem > > > > > > > > > > > > > > > > > > >>> > as > > > > > > > > > > > > > > > > > > >>> > > > two > > > > > > > > > > > > > > > > > > >>> > > > > >> > coordinators keep a copy > > of > > > > this > > > > > > > > > > assignment > > > > > > > > > > > > > which > > > > > > > > > > > > > > > may > > > > > > > > > > > > > > > > be > > > > > > > > > > > > > > > > > > >>> > > different. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > >>> > > > > >> > I think co-locating does > > > have > > > > > some > > > > > > > > > merits > > > > > > > > > > > > here, > > > > > > > > > > > > > > i.e. > > > > > > > > > > > > > > > > > > >>> letting the > > > > > > > > > > > > > > > > > > >>> > > > > >> > ConsumerCoordinator > which > > > has > > > > > the > > > > > > > > > > > > > source-of-truth > > > > > > > > > > > > > > of > > > > > > > > > > > > > > > > > > >>> assignment > > > > > > > > > > > > > > > > > > >>> > to > > > > > > > > > > > > > > > > > > >>> > > > act > > > > > > > > > > > > > > > > > > >>> > > > > >> as > > > > > > > > > > > > > > > > > > >>> > > > > >> > the TxnCoordinator as > > well; > > > > but > > > > > I > > > > > > > > agree > > > > > > > > > > > > there's > > > > > > > > > > > > > > also > > > > > > > > > > > > > > > > > some > > > > > > > > > > > > > > > > > > >>> cons > > > > > > > > > > > > > > > > > > >>> > of > > > > > > > > > > > > > > > > > > >>> > > > > >> coupling > > > > > > > > > > > > > > > > > > >>> > > > > >> > them together. I'm > still a > > > bit > > > > > > > > inclining > > > > > > > > > > > > towards > > > > > > > > > > > > > > > > > > colocation > > > > > > > > > > > > > > > > > > >>> but > > > > > > > > > > > > > > > > > > >>> > if > > > > > > > > > > > > > > > > > > >>> > > > there > > > > > > > > > > > > > > > > > > >>> > > > > >> > are good rationales not > to > > > do > > > > > so I > > > > > > > can > > > > > > > > > be > > > > > > > > > > > > > > convinced > > > > > > > > > > > > > > > as > > > > > > > > > > > > > > > > > > well. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > >>> > > > > > The purpose of co-location > is > > > to > > > > > let > > > > > > > txn > > > > > > > > > > > > > coordinator > > > > > > > > > > > > > > > see > > > > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > > >>> group > > > > > > > > > > > > > > > > > > >>> > > > > > assignment. This priority > is > > > > > weakened > > > > > > > > > > > > > > > > > > >>> > > > > > when we already have > defense > > on > > > > the > > > > > > > > > consumer > > > > > > > > > > > > offset > > > > > > > > > > > > > > > > fetch, > > > > > > > > > > > > > > > > > > so I > > > > > > > > > > > > > > > > > > >>> > guess > > > > > > > > > > > > > > > > > > >>> > > > it's > > > > > > > > > > > > > > > > > > >>> > > > > > not super important > anymore. > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > 4. I guess I'm > preferring > > > the > > > > > > > > philosophy > > > > > > > > > > of > > > > > > > > > > > > > "only > > > > > > > > > > > > > > > add > > > > > > > > > > > > > > > > > > >>> configs if > > > > > > > > > > > > > > > > > > >>> > > > > >> there's no > > > > > > > > > > > > > > > > > > >>> > > > > >> > other ways", since more > > and > > > > more > > > > > > > > configs > > > > > > > > > > > would > > > > > > > > > > > > > > make > > > > > > > > > > > > > > > it > > > > > > > > > > > > > > > > > > less > > > > > > > > > > > > > > > > > > >>> and > > > > > > > > > > > > > > > > > > >>> > > less > > > > > > > > > > > > > > > > > > >>> > > > > >> > intuitive out of the box > > to > > > > use. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > >>> > > > > >> > I think it's a valid > point > > > > that > > > > > > > checks > > > > > > > > > > upon > > > > > > > > > > > > > > starting > > > > > > > > > > > > > > > > up > > > > > > > > > > > > > > > > > > >>> does not > > > > > > > > > > > > > > > > > > >>> > > > cope > > > > > > > > > > > > > > > > > > >>> > > > > >> with > > > > > > > > > > > > > > > > > > >>> > > > > >> > brokers downgrading but > > even > > > > > with > > > > > > a > > > > > > > > > > config, > > > > > > > > > > > > but > > > > > > > > > > > > > it > > > > > > > > > > > > > > > is > > > > > > > > > > > > > > > > > > still > > > > > > > > > > > > > > > > > > >>> hard > > > > > > > > > > > > > > > > > > >>> > > for > > > > > > > > > > > > > > > > > > >>> > > > > >> users > > > > > > > > > > > > > > > > > > >>> > > > > >> > to determine when they > can > > > be > > > > > > > ensured > > > > > > > > > the > > > > > > > > > > > > broker > > > > > > > > > > > > > > > would > > > > > > > > > > > > > > > > > > never > > > > > > > > > > > > > > > > > > >>> > > > downgrade > > > > > > > > > > > > > > > > > > >>> > > > > >> > anymore and hence can > > safely > > > > > > switch > > > > > > > > the > > > > > > > > > > > > config. > > > > > > > > > > > > > So > > > > > > > > > > > > > > > my > > > > > > > > > > > > > > > > > > >>> feeling is > > > > > > > > > > > > > > > > > > >>> > > > that > > > > > > > > > > > > > > > > > > >>> > > > > >> this > > > > > > > > > > > > > > > > > > >>> > > > > >> > config would not be > > helping > > > > too > > > > > > much > > > > > > > > > > still. > > > > > > > > > > > If > > > > > > > > > > > > > we > > > > > > > > > > > > > > > want > > > > > > > > > > > > > > > > > to > > > > > > > > > > > > > > > > > > >>> be at > > > > > > > > > > > > > > > > > > >>> > > the > > > > > > > > > > > > > > > > > > >>> > > > > >> safer > > > > > > > > > > > > > > > > > > >>> > > > > >> > side, then I'd suggest > we > > > > modify > > > > > > the > > > > > > > > > > > > Coordinator > > > > > > > > > > > > > > -> > > > > > > > > > > > > > > > > > > >>> > NetworkClient > > > > > > > > > > > > > > > > > > >>> > > > > >> hierarchy > > > > > > > > > > > > > > > > > > >>> > > > > >> > to allow the > NetworkClient > > > > being > > > > > > > able > > > > > > > > to > > > > > > > > > > > pass > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > > APIVersion > > > > > > > > > > > > > > > > > > >>> > > > metadata to > > > > > > > > > > > > > > > > > > >>> > > > > >> > Coordinator, so that > > > > Coordinator > > > > > > can > > > > > > > > > rely > > > > > > > > > > on > > > > > > > > > > > > > that > > > > > > > > > > > > > > > > logic > > > > > > > > > > > > > > > > > to > > > > > > > > > > > > > > > > > > >>> > change > > > > > > > > > > > > > > > > > > >>> > > > its > > > > > > > > > > > > > > > > > > >>> > > > > >> > behavior dynamically. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > >>> > > > > > The stream thread init > could > > > not > > > > be > > > > > > > > > supported > > > > > > > > > > > by > > > > > > > > > > > > a > > > > > > > > > > > > > > > client > > > > > > > > > > > > > > > > > > >>> > coordinator > > > > > > > > > > > > > > > > > > >>> > > > > > behavior change on the fly, > > > > > > > > > > > > > > > > > > >>> > > > > > we are only losing > > > possibilities > > > > > > after > > > > > > > we > > > > > > > > > > > > > > initialized. > > > > > > > > > > > > > > > > > (main > > > > > > > > > > > > > > > > > > >>> thread > > > > > > > > > > > > > > > > > > >>> > > > gets > > > > > > > > > > > > > > > > > > >>> > > > > > exit and no thread has > global > > > > > picture > > > > > > > > > > anymore) > > > > > > > > > > > > > > > > > > >>> > > > > > If we do want to support > auto > > > > > version > > > > > > > > > > > detection, > > > > > > > > > > > > > > admin > > > > > > > > > > > > > > > > > client > > > > > > > > > > > > > > > > > > >>> > request > > > > > > > > > > > > > > > > > > >>> > > > in > > > > > > > > > > > > > > > > > > >>> > > > > > this sense shall be easier. > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > >>> > > > > >> > 5. I do not have a > > concrete > > > > idea > > > > > > > about > > > > > > > > > how > > > > > > > > > > > the > > > > > > > > > > > > > > > impact > > > > > > > > > > > > > > > > on > > > > > > > > > > > > > > > > > > >>> Connect > > > > > > > > > > > > > > > > > > >>> > > > would > > > > > > > > > > > > > > > > > > >>> > > > > >> > make, maybe Randall or > > > > > Konstantine > > > > > > > can > > > > > > > > > > help > > > > > > > > > > > > > here? > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > >>> > > > > > Sounds good, let's see > their > > > > > > thoughts. > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > Guozhang > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > >>> > > > > >> > On Mon, Jun 24, 2019 at > > > 10:26 > > > > PM > > > > > > > > Boyang > > > > > > > > > > > Chen < > > > > > > > > > > > > > > > > > > >>> > > > > >> > reluctanthero...@gmail.com> > > > > > > > > > > > > > > > > > > >>> > > > > >> > wrote: > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > Hey Jason, > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > thank you for the > > proposal > > > > > here. > > > > > > > > Some > > > > > > > > > of > > > > > > > > > > > my > > > > > > > > > > > > > > > thoughts > > > > > > > > > > > > > > > > > > >>> below. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > On Mon, Jun 24, 2019 > at > > > 8:58 > > > > > PM > > > > > > > > Jason > > > > > > > > > > > > > Gustafson > > > > > > > > > > > > > > < > > > > > > > > > > > > > > > > > > >>> > > > ja...@confluent.io> > > > > > > > > > > > > > > > > > > >>> > > > > >> > > wrote: > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > Hi Boyang, > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > Thanks for picking > > this > > > > up! > > > > > > > Still > > > > > > > > > > > reading > > > > > > > > > > > > > > > through > > > > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > > >>> > updates, > > > > > > > > > > > > > > > > > > >>> > > > but > > > > > > > > > > > > > > > > > > >>> > > > > >> here > > > > > > > > > > > > > > > > > > >>> > > > > >> > > are > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > a couple initial > > > comments > > > > on > > > > > > the > > > > > > > > > APIs: > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > 1. The > > > > `TxnProducerIdentity` > > > > > > > class > > > > > > > > > is > > > > > > > > > > a > > > > > > > > > > > > bit > > > > > > > > > > > > > > > > > awkward. I > > > > > > > > > > > > > > > > > > >>> think > > > > > > > > > > > > > > > > > > >>> > > we > > > > > > > > > > > > > > > > > > >>> > > > are > > > > > > > > > > > > > > > > > > >>> > > > > >> > > trying > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > to encapsulate state > > > from > > > > > the > > > > > > > > > current > > > > > > > > > > > > group > > > > > > > > > > > > > > > > > > assignment. > > > > > > > > > > > > > > > > > > >>> > Maybe > > > > > > > > > > > > > > > > > > >>> > > > > >> something > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > like > > > `ConsumerAssignment` > > > > > > would > > > > > > > be > > > > > > > > > > > > clearer? > > > > > > > > > > > > > If > > > > > > > > > > > > > > > we > > > > > > > > > > > > > > > > > make > > > > > > > > > > > > > > > > > > >>> the > > > > > > > > > > > > > > > > > > >>> > > usage > > > > > > > > > > > > > > > > > > >>> > > > > >> > > consistent > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > across the consumer > > and > > > > > > > producer, > > > > > > > > > then > > > > > > > > > > > we > > > > > > > > > > > > > can > > > > > > > > > > > > > > > > avoid > > > > > > > > > > > > > > > > > > >>> exposing > > > > > > > > > > > > > > > > > > >>> > > > > >> internal > > > > > > > > > > > > > > > > > > >>> > > > > >> > > state > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > like the > generationId. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > For example: > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > // Public API > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > interface > > > > > ConsumerAssignment { > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > Set<TopicPartition> > > > > > > > > partittions(); > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > } > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > // Not a public API > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > class > > > > > > InternalConsumerAssignment > > > > > > > > > > > > implements > > > > > > > > > > > > > > > > > > >>> > > ConsumerAssignment { > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > Set<TopicPartition> > > > > > > > partittions; > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > int generationId; > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > } > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > Then we can change > the > > > > > > rebalance > > > > > > > > > > > listener > > > > > > > > > > > > to > > > > > > > > > > > > > > > > > something > > > > > > > > > > > > > > > > > > >>> like > > > > > > > > > > > > > > > > > > >>> > > > this: > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > onPartitionsAssigned(ConsumerAssignment > > > > > > > > > > > > > > > > assignment) > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > And on the producer: > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > void > > > > initTransactions(String > > > > > > > > > groupId, > > > > > > > > > > > > > > > > > > ConsumerAssignment > > > > > > > > > > > > > > > > > > >>> > > > > >> assignment); > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > 2. Another bit of > > > > > awkwardness > > > > > > is > > > > > > > > the > > > > > > > > > > > fact > > > > > > > > > > > > > that > > > > > > > > > > > > > > > we > > > > > > > > > > > > > > > > > have > > > > > > > > > > > > > > > > > > >>> to > > > > > > > > > > > > > > > > > > >>> > pass > > > > > > > > > > > > > > > > > > >>> > > > the > > > > > > > > > > > > > > > > > > >>> > > > > >> > > groupId > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > through both > > > > > > initTransactions() > > > > > > > > and > > > > > > > > > > > > > > > > > > >>> > > sendOffsetsToTransaction(). > > > > > > > > > > > > > > > > > > >>> > > > We > > > > > > > > > > > > > > > > > > >>> > > > > >> > could > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > consider a config > > > instead. > > > > > > Maybe > > > > > > > > > > > something > > > > > > > > > > > > > > like > > > > > > > > > > > > > > > ` > > > > > > > > > > > > > > > > > > >>> > > > > >> > transactional.group.id > > > > > > > > > > > > > > > > > > >>> > > > > >> > > `? > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > Then we could > simplify > > > the > > > > > > > > producer > > > > > > > > > > > APIs, > > > > > > > > > > > > > > > > > potentially > > > > > > > > > > > > > > > > > > >>> even > > > > > > > > > > > > > > > > > > >>> > > > > >> deprecating > > > > > > > > > > > > > > > > > > >>> > > > > >> > > the > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > current > > > > > > > sendOffsetsToTransaction. > > > > > > > > In > > > > > > > > > > > fact, > > > > > > > > > > > > > for > > > > > > > > > > > > > > > > this > > > > > > > > > > > > > > > > > > new > > > > > > > > > > > > > > > > > > >>> > usage, > > > > > > > > > > > > > > > > > > >>> > > > the ` > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > transational.id` > > config > > > > is > > > > > > not > > > > > > > > > > needed. > > > > > > > > > > > It > > > > > > > > > > > > > > would > > > > > > > > > > > > > > > > be > > > > > > > > > > > > > > > > > > >>> nice if > > > > > > > > > > > > > > > > > > >>> > we > > > > > > > > > > > > > > > > > > >>> > > > don't > > > > > > > > > > > > > > > > > > >>> > > > > >> > have > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > to > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > provide it. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > I like the idea of > > > > > combining 1 > > > > > > > and > > > > > > > > > 2. > > > > > > > > > > We > > > > > > > > > > > > > could > > > > > > > > > > > > > > > > > > >>> definitely > > > > > > > > > > > > > > > > > > >>> > pass > > > > > > > > > > > > > > > > > > >>> > > > in a > > > > > > > > > > > > > > > > > > >>> > > > > >> > > group.id config > > > > > > > > > > > > > > > > > > >>> > > > > >> > > so that we could avoid > > > > > exposing > > > > > > > that > > > > > > > > > > > > > information > > > > > > > > > > > > > > > in > > > > > > > > > > > > > > > > a > > > > > > > > > > > > > > > > > > >>> public > > > > > > > > > > > > > > > > > > >>> > > API. > > > > > > > > > > > > > > > > > > >>> > > > The > > > > > > > > > > > > > > > > > > >>> > > > > >> > > question I have > > > > > > > > > > > > > > > > > > >>> > > > > >> > > is that whether we > > should > > > > name > > > > > > the > > > > > > > > > > > interface > > > > > > > > > > > > > > > > > > >>> `GroupAssignment` > > > > > > > > > > > > > > > > > > >>> > > > > >> instead, > > > > > > > > > > > > > > > > > > >>> > > > > >> > so > > > > > > > > > > > > > > > > > > >>> > > > > >> > > that Connect later > > > > > > > > > > > > > > > > > > >>> > > > > >> > > could also extend on > the > > > > same > > > > > > > > > interface, > > > > > > > > > > > > just > > > > > > > > > > > > > to > > > > > > > > > > > > > > > > echo > > > > > > > > > > > > > > > > > > >>> > Guozhang's > > > > > > > > > > > > > > > > > > >>> > > > point > > > > > > > > > > > > > > > > > > >>> > > > > >> > > here, Also the base > > > > interface > > > > > > > > > > > > > > > > > > >>> > > > > >> > > is better to be > defined > > > > empty > > > > > > for > > > > > > > > easy > > > > > > > > > > > > > > extension, > > > > > > > > > > > > > > > or > > > > > > > > > > > > > > > > > > >>> define an > > > > > > > > > > > > > > > > > > >>> > > > > >> abstract > > > > > > > > > > > > > > > > > > >>> > > > > >> > > type called `Resource` > > to > > > be > > > > > > > > shareable > > > > > > > > > > > > > > > > > > >>> > > > > >> > > later IMHO. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > By the way, I'm a > bit > > > > > confused > > > > > > > > about > > > > > > > > > > > > > > discussion > > > > > > > > > > > > > > > > > above > > > > > > > > > > > > > > > > > > >>> about > > > > > > > > > > > > > > > > > > >>> > > > > >> colocating > > > > > > > > > > > > > > > > > > >>> > > > > >> > > the > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > txn and group > > > > coordinators. > > > > > > That > > > > > > > > is > > > > > > > > > > not > > > > > > > > > > > > > > actually > > > > > > > > > > > > > > > > > > >>> necessary, > > > > > > > > > > > > > > > > > > >>> > is > > > > > > > > > > > > > > > > > > >>> > > > it? > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > Yes, this is not a > > > > > requirement > > > > > > > for > > > > > > > > > > this > > > > > > > > > > > > KIP, > > > > > > > > > > > > > > > > because > > > > > > > > > > > > > > > > > > it > > > > > > > > > > > > > > > > > > >>> is > > > > > > > > > > > > > > > > > > >>> > > > > >> inherently > > > > > > > > > > > > > > > > > > >>> > > > > >> > > impossible to > > > > > > > > > > > > > > > > > > >>> > > > > >> > > achieve co-locating > > topic > > > > > > > partition > > > > > > > > > of > > > > > > > > > > > > > > > transaction > > > > > > > > > > > > > > > > > log > > > > > > > > > > > > > > > > > > >>> and > > > > > > > > > > > > > > > > > > >>> > > > consumed > > > > > > > > > > > > > > > > > > >>> > > > > >> > offset > > > > > > > > > > > > > > > > > > >>> > > > > >> > > topics. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > Thanks, > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > Jason > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > On Mon, Jun 24, 2019 > at > > > > 10:07 > > > > > AM > > > > > > > > > Boyang > > > > > > > > > > > > Chen < > > > > > > > > > > > > > > > > > > >>> > > > > >> > reluctanthero...@gmail.com > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > wrote: > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > Thank you Ismael > for > > > the > > > > > > > > > suggestion. > > > > > > > > > > > We > > > > > > > > > > > > > will > > > > > > > > > > > > > > > > > attempt > > > > > > > > > > > > > > > > > > >>> to > > > > > > > > > > > > > > > > > > >>> > > > address > > > > > > > > > > > > > > > > > > >>> > > > > >> it by > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > giving more > details > > to > > > > > > > rejected > > > > > > > > > > > > > alternative > > > > > > > > > > > > > > > > > section. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > Thank you for the > > > > comment > > > > > > > > > Guozhang! > > > > > > > > > > > > > Answers > > > > > > > > > > > > > > > are > > > > > > > > > > > > > > > > > > inline > > > > > > > > > > > > > > > > > > >>> > > below. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > On Sun, Jun 23, > 2019 > > > at > > > > > 6:33 > > > > > > > PM > > > > > > > > > > > Guozhang > > > > > > > > > > > > > > Wang > > > > > > > > > > > > > > > < > > > > > > > > > > > > > > > > > > >>> > > > wangg...@gmail.com > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > wrote: > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > Hello Boyang, > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > Thanks for the > > KIP, > > > I > > > > > have > > > > > > > > some > > > > > > > > > > > > comments > > > > > > > > > > > > > > > > below: > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > 1. "Once > > > transactions > > > > > are > > > > > > > > > > complete, > > > > > > > > > > > > the > > > > > > > > > > > > > > call > > > > > > > > > > > > > > > > > will > > > > > > > > > > > > > > > > > > >>> > return." > > > > > > > > > > > > > > > > > > >>> > > > This > > > > > > > > > > > > > > > > > > >>> > > > > >> > seems > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > different from > the > > > > > > existing > > > > > > > > > > > behavior, > > > > > > > > > > > > in > > > > > > > > > > > > > > > which > > > > > > > > > > > > > > > > > we > > > > > > > > > > > > > > > > > > >>> would > > > > > > > > > > > > > > > > > > >>> > > > return a > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > retriable > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > CONCURRENT_TRANSACTIONS > > > > > > and > > > > > > > > let > > > > > > > > > > the > > > > > > > > > > > > > client > > > > > > > > > > > > > > > to > > > > > > > > > > > > > > > > > > >>> retry, is > > > > > > > > > > > > > > > > > > >>> > > this > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > intentional? > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > I don’t think it > is > > > > > > > intentional, > > > > > > > > > > and I > > > > > > > > > > > > > will > > > > > > > > > > > > > > > > defer > > > > > > > > > > > > > > > > > > this > > > > > > > > > > > > > > > > > > >>> > > > question to > > > > > > > > > > > > > > > > > > >>> > > > > >> > > Jason > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > when he got time > to > > > > answer > > > > > > > since > > > > > > > > > > from > > > > > > > > > > > > > what I > > > > > > > > > > > > > > > > > > >>> understood > > > > > > > > > > > > > > > > > > >>> > > retry > > > > > > > > > > > > > > > > > > >>> > > > and > > > > > > > > > > > > > > > > > > >>> > > > > >> on > > > > > > > > > > > > > > > > > > >>> > > > > >> > > hold > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > seem both valid > > > > > approaches. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > 2. "an overload > to > > > > > > > > > > > > onPartitionsAssigned > > > > > > > > > > > > > in > > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > > >>> > consumer's > > > > > > > > > > > > > > > > > > >>> > > > > >> rebalance > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > listener > > interface": > > > > as > > > > > > part > > > > > > > > of > > > > > > > > > > > > KIP-341 > > > > > > > > > > > > > > > we've > > > > > > > > > > > > > > > > > > >>> already > > > > > > > > > > > > > > > > > > >>> > add > > > > > > > > > > > > > > > > > > >>> > > > this > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > information > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > to the > > onAssignment > > > > > > > callback. > > > > > > > > > > Would > > > > > > > > > > > > this > > > > > > > > > > > > > > be > > > > > > > > > > > > > > > > > > >>> sufficient? > > > > > > > > > > > > > > > > > > >>> > Or > > > > > > > > > > > > > > > > > > >>> > > > more > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > generally > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > speaking, which > > > > > > information > > > > > > > > have > > > > > > > > > > to > > > > > > > > > > > be > > > > > > > > > > > > > > > passed > > > > > > > > > > > > > > > > > > >>> around in > > > > > > > > > > > > > > > > > > >>> > > > > >> rebalance > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > callback > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > while others can > > be > > > > > passed > > > > > > > > > around > > > > > > > > > > in > > > > > > > > > > > > > > > > > > >>> PartitionAssignor > > > > > > > > > > > > > > > > > > >>> > > > > >> callback? In > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > Streams > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > for example both > > > > > callbacks > > > > > > > are > > > > > > > > > > used > > > > > > > > > > > > but > > > > > > > > > > > > > > most > > > > > > > > > > > > > > > > > > >>> critical > > > > > > > > > > > > > > > > > > >>> > > > > >> information > > > > > > > > > > > > > > > > > > >>> > > > > >> > is > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > passed > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > via > onAssignment. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > We still need to > > > extend > > > > > > > > > > > > > > > > ConsumerRebalanceListener > > > > > > > > > > > > > > > > > > >>> because > > > > > > > > > > > > > > > > > > >>> > > > it’s the > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > interface we could > > > have > > > > > > public > > > > > > > > > > access > > > > > > > > > > > > to. > > > > > > > > > > > > > > The > > > > > > > > > > > > > > > > > > >>> > #onAssignment > > > > > > > > > > > > > > > > > > >>> > > > call > > > > > > > > > > > > > > > > > > >>> > > > > >> is > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > defined > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > on > PartitionAssignor > > > > level > > > > > > > which > > > > > > > > > is > > > > > > > > > > > not > > > > > > > > > > > > > easy > > > > > > > > > > > > > > > to > > > > > > > > > > > > > > > > > work > > > > > > > > > > > > > > > > > > >>> with > > > > > > > > > > > > > > > > > > >>> > > > external > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > producers. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > 3. "We propose > to > > > use > > > > a > > > > > > > > separate > > > > > > > > > > > > record > > > > > > > > > > > > > > type > > > > > > > > > > > > > > > > in > > > > > > > > > > > > > > > > > > >>> order to > > > > > > > > > > > > > > > > > > >>> > > > store > > > > > > > > > > > > > > > > > > >>> > > > > >> the > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > group > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > assignment.": > > hmm, I > > > > > > thought > > > > > > > > > with > > > > > > > > > > > the > > > > > > > > > > > > > > third > > > > > > > > > > > > > > > > > typed > > > > > > > > > > > > > > > > > > >>> > > > > >> FindCoordinator, > > > > > > > > > > > > > > > > > > >>> > > > > >> > > the > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > same > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > broker that act > as > > > the > > > > > > > > consumer > > > > > > > > > > > > > > coordinator > > > > > > > > > > > > > > > > > would > > > > > > > > > > > > > > > > > > >>> > always > > > > > > > > > > > > > > > > > > >>> > > be > > > > > > > > > > > > > > > > > > >>> > > > > >> > selected > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > as > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > the txn > > coordinator, > > > > in > > > > > > > which > > > > > > > > > case > > > > > > > > > > > it > > > > > > > > > > > > > can > > > > > > > > > > > > > > > > access > > > > > > > > > > > > > > > > > > its > > > > > > > > > > > > > > > > > > >>> > local > > > > > > > > > > > > > > > > > > >>> > > > cache > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > metadata / > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > offset topic to > > get > > > > this > > > > > > > > > > information > > > > > > > > > > > > > > > already? > > > > > > > > > > > > > > > > We > > > > > > > > > > > > > > > > > > >>> just > > > > > > > > > > > > > > > > > > >>> > need > > > > > > > > > > > > > > > > > > >>> > > > to > > > > > > > > > > > > > > > > > > >>> > > > > >> think > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > about > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > how to make > these > > > two > > > > > > > modules > > > > > > > > > > > directly > > > > > > > > > > > > > > > > exchange > > > > > > > > > > > > > > > > > > >>> > > information > > > > > > > > > > > > > > > > > > >>> > > > > >> without > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > messing > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > up the code > > > hierarchy. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > These two > > coordinators > > > > > will > > > > > > be > > > > > > > > on > > > > > > > > > > the > > > > > > > > > > > > same > > > > > > > > > > > > > > > > broker > > > > > > > > > > > > > > > > > > only > > > > > > > > > > > > > > > > > > >>> > when > > > > > > > > > > > > > > > > > > >>> > > > > >> number of > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > partitions for > > > > transaction > > > > > > > state > > > > > > > > > > topic > > > > > > > > > > > > and > > > > > > > > > > > > > > > > > consumer > > > > > > > > > > > > > > > > > > >>> offset > > > > > > > > > > > > > > > > > > >>> > > > topic > > > > > > > > > > > > > > > > > > >>> > > > > >> are > > > > > > > > > > > > > > > > > > >>> > > > > >> > > the > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > same. This > normally > > > > holds > > > > > > > true, > > > > > > > > > but > > > > > > > > > > > I'm > > > > > > > > > > > > > > afraid > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > we couldn't make > > this > > > > > > > > assumption? > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > 4. The config of > > > > > > > > > > > > > > > > > "CONSUMER_GROUP_AWARE_TRANSACTION": > > > > > > > > > > > > > > > > > > >>> it > > > > > > > > > > > > > > > > > > >>> > > seems > > > > > > > > > > > > > > > > > > >>> > > > the > > > > > > > > > > > > > > > > > > >>> > > > > >> > goal > > > > > > > > > > > > > > > > > > >>> > > > > >> > > of > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > this config is > > just > > > to > > > > > > avoid > > > > > > > > > > > > > old-versioned > > > > > > > > > > > > > > > > > broker > > > > > > > > > > > > > > > > > > >>> to not > > > > > > > > > > > > > > > > > > >>> > > be > > > > > > > > > > > > > > > > > > >>> > > > > >> able to > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > recognize newer > > > > > versioned > > > > > > > > > client. > > > > > > > > > > I > > > > > > > > > > > > > think > > > > > > > > > > > > > > if > > > > > > > > > > > > > > > > we > > > > > > > > > > > > > > > > > > can > > > > > > > > > > > > > > > > > > >>> do > > > > > > > > > > > > > > > > > > >>> > > > something > > > > > > > > > > > > > > > > > > >>> > > > > >> > else > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > to > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > avoid this > config > > > > > though, > > > > > > > for > > > > > > > > > > > example > > > > > > > > > > > > we > > > > > > > > > > > > > > can > > > > > > > > > > > > > > > > use > > > > > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > > >>> > > > embedded > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > AdminClient > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > to send the > > > APIVersion > > > > > > > request > > > > > > > > > > upon > > > > > > > > > > > > > > starting > > > > > > > > > > > > > > > > up, > > > > > > > > > > > > > > > > > > and > > > > > > > > > > > > > > > > > > >>> > based > > > > > > > > > > > > > > > > > > >>> > > > on > > > > > > > > > > > > > > > > > > >>> > > > > >> the > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > returned > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > value decides > > > whether > > > > to > > > > > > go > > > > > > > to > > > > > > > > > the > > > > > > > > > > > old > > > > > > > > > > > > > > code > > > > > > > > > > > > > > > > path > > > > > > > > > > > > > > > > > > or > > > > > > > > > > > > > > > > > > >>> the > > > > > > > > > > > > > > > > > > >>> > > new > > > > > > > > > > > > > > > > > > >>> > > > > >> > behavior. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > Admittedly > asking > > a > > > > > random > > > > > > > > > broker > > > > > > > > > > > > about > > > > > > > > > > > > > > > > > APIVersion > > > > > > > > > > > > > > > > > > >>> does > > > > > > > > > > > > > > > > > > >>> > > not > > > > > > > > > > > > > > > > > > >>> > > > > >> > guarantee > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > the > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > whole cluster's > > > > > versions, > > > > > > > but > > > > > > > > > what > > > > > > > > > > > we > > > > > > > > > > > > > can > > > > > > > > > > > > > > do > > > > > > > > > > > > > > > > is > > > > > > > > > > > > > > > > > to > > > > > > > > > > > > > > > > > > >>> first > > > > > > > > > > > > > > > > > > >>> > > 1) > > > > > > > > > > > > > > > > > > >>> > > > find > > > > > > > > > > > > > > > > > > >>> > > > > >> > the > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > coordinator (and > > if > > > > the > > > > > > > random > > > > > > > > > > > broker > > > > > > > > > > > > > does > > > > > > > > > > > > > > > not > > > > > > > > > > > > > > > > > > even > > > > > > > > > > > > > > > > > > >>> > > > recognize > > > > > > > > > > > > > > > > > > >>> > > > > >> the > > > > > > > > > > > > > > > > > > >>> > > > > >> > new > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > discover type, > > fall > > > > back > > > > > > to > > > > > > > > old > > > > > > > > > > path > > > > > > > > > > > > > > > > directly), > > > > > > > > > > > > > > > > > > and > > > > > > > > > > > > > > > > > > >>> then > > > > > > > > > > > > > > > > > > >>> > > 2) > > > > > > > > > > > > > > > > > > >>> > > > ask > > > > > > > > > > > > > > > > > > >>> > > > > >> the > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > discovered > > > coordinator > > > > > > about > > > > > > > > its > > > > > > > > > > > > > supported > > > > > > > > > > > > > > > > > > >>> APIVersion. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > The caveat here is > > > that > > > > we > > > > > > > have > > > > > > > > to > > > > > > > > > > > make > > > > > > > > > > > > > sure > > > > > > > > > > > > > > > > both > > > > > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > > > >>> > group > > > > > > > > > > > > > > > > > > >>> > > > > >> > coordinator > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > and > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > transaction > > > coordinator > > > > > are > > > > > > on > > > > > > > > the > > > > > > > > > > > > latest > > > > > > > > > > > > > > > > version > > > > > > > > > > > > > > > > > > >>> during > > > > > > > > > > > > > > > > > > >>> > > init > > > > > > > > > > > > > > > > > > >>> > > > > >> stage. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > This > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > is potentially > > doable > > > as > > > > > we > > > > > > > only > > > > > > > > > > need > > > > > > > > > > > a > > > > > > > > > > > > > > > consumer > > > > > > > > > > > > > > > > > > >>> group.id > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > to check that. In > > the > > > > > > > meantime, > > > > > > > > a > > > > > > > > > > > > > hard-coded > > > > > > > > > > > > > > > > > config > > > > > > > > > > > > > > > > > > is > > > > > > > > > > > > > > > > > > >>> > > still a > > > > > > > > > > > > > > > > > > >>> > > > > >> > > favorable > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > backup in case the > > > > server > > > > > > has > > > > > > > > > > > > downgraded, > > > > > > > > > > > > > so > > > > > > > > > > > > > > > you > > > > > > > > > > > > > > > > > > will > > > > > > > > > > > > > > > > > > >>> want > > > > > > > > > > > > > > > > > > >>> > > to > > > > > > > > > > > > > > > > > > >>> > > > use > > > > > > > > > > > > > > > > > > >>> > > > > >> a > > > > > > > > > > > > > > > > > > >>> > > > > >> > new > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > version client > > without > > > > > > > `consumer > > > > > > > > > > > group` > > > > > > > > > > > > > > > > > > transactional > > > > > > > > > > > > > > > > > > >>> > > support. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > 5. This is a meta > > > > > question: > > > > > > > have > > > > > > > > > you > > > > > > > > > > > > > > > considered > > > > > > > > > > > > > > > > > how > > > > > > > > > > > > > > > > > > >>> this > > > > > > > > > > > > > > > > > > >>> > can > > > > > > > > > > > > > > > > > > >>> > > > be > > > > > > > > > > > > > > > > > > >>> > > > > >> > applied > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > to > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > Kafka Connect as > > > well? > > > > > For > > > > > > > > > > example, > > > > > > > > > > > > for > > > > > > > > > > > > > > > source > > > > > > > > > > > > > > > > > > >>> > connectors, > > > > > > > > > > > > > > > > > > >>> > > > the > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > assignment > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > is not by > > > > "partitions", > > > > > > but > > > > > > > by > > > > > > > > > > some > > > > > > > > > > > > > other > > > > > > > > > > > > > > > sort > > > > > > > > > > > > > > > > > of > > > > > > > > > > > > > > > > > > >>> > > > "resources" > > > > > > > > > > > > > > > > > > >>> > > > > >> based > > > > > > > > > > > > > > > > > > >>> > > > > >> > > on > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > the > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > source systems, > > how > > > > > > KIP-447 > > > > > > > > > would > > > > > > > > > > > > affect > > > > > > > > > > > > > > > Kafka > > > > > > > > > > > > > > > > > > >>> > Connectors > > > > > > > > > > > > > > > > > > >>> > > > that > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > implemented > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > EOS as well? > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > No, it's not > > currently > > > > > > > included > > > > > > > > in > > > > > > > > > > the > > > > > > > > > > > > > > scope. > > > > > > > > > > > > > > > > > Could > > > > > > > > > > > > > > > > > > >>> you > > > > > > > > > > > > > > > > > > >>> > > point > > > > > > > > > > > > > > > > > > >>> > > > me > > > > > > > > > > > > > > > > > > >>> > > > > >> to a > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > sample source > > > connector > > > > > who > > > > > > > uses > > > > > > > > > > EOS? > > > > > > > > > > > > > Could > > > > > > > > > > > > > > > > always > > > > > > > > > > > > > > > > > > >>> > > piggy-back > > > > > > > > > > > > > > > > > > >>> > > > into > > > > > > > > > > > > > > > > > > >>> > > > > >> > the > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > TxnProducerIdentity > > > > struct > > > > > > > with > > > > > > > > > more > > > > > > > > > > > > > > > information > > > > > > > > > > > > > > > > > > such > > > > > > > > > > > > > > > > > > >>> as > > > > > > > > > > > > > > > > > > >>> > > > tasks. If > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > this is something > to > > > > > support > > > > > > > in > > > > > > > > > near > > > > > > > > > > > > term, > > > > > > > > > > > > > > an > > > > > > > > > > > > > > > > > > abstract > > > > > > > > > > > > > > > > > > >>> > type > > > > > > > > > > > > > > > > > > >>> > > > called > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > "Resource" could > be > > > > > provided > > > > > > > and > > > > > > > > > let > > > > > > > > > > > > topic > > > > > > > > > > > > > > > > > partition > > > > > > > > > > > > > > > > > > >>> and > > > > > > > > > > > > > > > > > > >>> > > > connect > > > > > > > > > > > > > > > > > > >>> > > > > >> task > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > implement it. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > Guozhang > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > On Sat, Jun 22, > > 2019 > > > > at > > > > > > 8:40 > > > > > > > > PM > > > > > > > > > > > Ismael > > > > > > > > > > > > > > Juma > > > > > > > > > > > > > > > < > > > > > > > > > > > > > > > > > > >>> > > > ism...@juma.me.uk> > > > > > > > > > > > > > > > > > > >>> > > > > >> > > wrote: > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > Hi Boyang, > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > Thanks for the > > > KIP. > > > > > It's > > > > > > > > good > > > > > > > > > > that > > > > > > > > > > > > we > > > > > > > > > > > > > > > > listed a > > > > > > > > > > > > > > > > > > >>> number > > > > > > > > > > > > > > > > > > >>> > of > > > > > > > > > > > > > > > > > > >>> > > > > >> rejected > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > alternatives. > It > > > > would > > > > > > be > > > > > > > > > > helpful > > > > > > > > > > > to > > > > > > > > > > > > > > have > > > > > > > > > > > > > > > an > > > > > > > > > > > > > > > > > > >>> > explanation > > > > > > > > > > > > > > > > > > >>> > > > of > > > > > > > > > > > > > > > > > > >>> > > > > >> why > > > > > > > > > > > > > > > > > > >>> > > > > >> > > they > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > were > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > rejected. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > Ismael > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > On Sat, Jun > 22, > > > 2019 > > > > > at > > > > > > > 8:31 > > > > > > > > > PM > > > > > > > > > > > > Boyang > > > > > > > > > > > > > > > Chen > > > > > > > > > > > > > > > > < > > > > > > > > > > > > > > > > > > >>> > > > > >> bche...@outlook.com > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > wrote: > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > Hey all, > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > I would like > > to > > > > > start > > > > > > a > > > > > > > > > > > discussion > > > > > > > > > > > > > for > > > > > > > > > > > > > > > > > > KIP-447: > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://cwiki.apache.org/confluence/display/KAFKA/KIP-447%3A+Producer+scalability+for+exactly+once+semantics > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > this is a > work > > > > > > > originated > > > > > > > > by > > > > > > > > > > > Jason > > > > > > > > > > > > > > > > Gustafson > > > > > > > > > > > > > > > > > > >>> and we > > > > > > > > > > > > > > > > > > >>> > > > would > > > > > > > > > > > > > > > > > > >>> > > > > >> like > > > > > > > > > > > > > > > > > > >>> > > > > >> > to > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > proceed > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > into > > discussion > > > > > stage. > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > Let me know > > your > > > > > > > thoughts, > > > > > > > > > > > thanks! > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > Boyang > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > -- > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > -- Guozhang > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > >>> > > > > >> > -- > > > > > > > > > > > > > > > > > > >>> > > > > >> > -- Guozhang > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > > >>> > > > > >> > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > >>> -- > > > > > > > > > > > > > > > > > > >>> -- Guozhang > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > > > > -- Guozhang > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > > -- Guozhang > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > -- Guozhang > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > -- Guozhang > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > -- Guozhang >