Hi David,

Thanks for the review. Appreciated it.

DJ05: Let's discuss more in the pull request.

DJ07: Add section “Bump Group Version” to “Rejected Alternatives”.

Thanks,
PoAn

> On Apr 16, 2025, at 4:34 PM, David Jacot <dja...@confluent.io.INVALID> wrote:
> 
> Hi PoAn,
> 
> Thanks for your very detailed answers!
> 
> DJ05: This seems reasonable. We can look into it more deeply during the
> implementation too.
> 
> DJ07: Yeah, I see your point. I don't have a strict opinion on this so I am
> happy to go with the majority. Could you please at least mention in the
> rejected alternative section? It would be good to have a trace of it.
> 
> Best,
> David
> 
> On Wed, Apr 16, 2025 at 4:23 AM PoAn Yang <yangp...@gmail.com 
> <mailto:yangp...@gmail.com>> wrote:
> 
>> Hi Lucas,
>> 
>> Thank you. Here is vote thread
>> https://lists.apache.org/thread/j90htmphjk783p697jjfg1xt8thmy33p.
>> 
>> Regards,
>> PoAn
>> 
>>> On Apr 16, 2025, at 12:07 AM, Lucas Brutschy 
>>> <lbruts...@confluent.io.INVALID>
>> wrote:
>>> 
>>> Hi PoAn,
>>> 
>>> from my side, we are good to move to a vote on this one.
>>> 
>>> Cheers,
>>> Lucas
>>> 
>>> On Thu, Apr 10, 2025 at 11:29 AM PoAn Yang <yangp...@gmail.com 
>>> <mailto:yangp...@gmail.com><mailto:
>> yangp...@gmail.com <mailto:yangp...@gmail.com>>> wrote:
>>>> 
>>>> Hi David and Lucas,
>>>> 
>>>> Thanks for the review and great suggestion.
>>>> 
>>>> DJ01: Add the statement about rack-aware rebalance was removed in 4.0.
>>>> 
>>>> DJ02: Change ConsumerGroupPartitionMetadataKey and
>>>> ConsumerGroupPartitionMetadataValue from removed to deprecated.
>>>> 
>>>> DJ03: In my sample implementation <
>> https://github.com/apache/kafka/pull/17444>, the cache is maintained in
>> GroupCoordinatorManager.
>>>> A GroupCoordinatorShard only have one GroupCoordinatorManager, so I
>> think it’s similar to
>>>> a cache per GroupCoordinatorShard instance.
>>>> 
>>>> DJ04: Add the order about how topic data will be computed to get a
>> topic hash.
>>>> 
>>>> DJ05: This is a good question. In topic hash, the Guava uses “final
>> mix” to ensure avalanche
>>>> effect. However for the single hash of subscribed topics in a group, we
>> cannot use simple
>>>> sum, because we need to avoid the edge case. For example, hash(a+b) and
>> hash(b+a) is
>>>> same. To fix this case, the hash function sorts topics by name and the
>> topic hash multiplied
>>>> by the position value like hash(a + 2b) and hash(b + 2a). I add this
>> case and regular expression case to the KIP.
>>>> 
>>>> DJ06: It’s good to add tombstone of ConsumerGroupPartitionMetadata, so
>> log compaction
>>>> can remove old data. Add this part to compatibility section.
>>>> 
>>>> DJ07: In previous discussion, you mentioned that assignors are sticky.
>> If the topology of the
>>>> group is the same, the upgrade/downgrade rebalance doesn’t change
>> anything.
>>>> 
>>>>>>>>>>>>>> DJ08: In my opinion, changing the format will be rare so it is
>>>>>>>>>>>>>> acceptable if rebalances are triggered in this case on
>>>>>>>>>>>>>> upgrade/downgrade. It is also what will happen if a cluster is
>>>>>>>>>>>>>> downgraded from 4.1 (with this KIP) to 4.0. The rebalance
>> won't
>>>>>>>> change
>>>>>>>>>>>>>> anything if the topology of the group is the same because
>>>>>> assignors
>>>>>>>>>>>>>> are sticky. The default ones are and we recommend custom ones
>> to
>>>>>>>> also
>>>>>>>>>>>>>> be.
>>>> 
>>>> With `group.version` change, we need to maintain two code in 4.1. One
>> is subscription
>>>> metadata without rack and another is group hash. Another drawback is
>> that changing
>>>> `group.version` will trigger all group rebalance at the same time.
>> IMHO, I would prefer
>>>> to keep the code simple.
>>>> 
>>>> DJ08: Add ConsumerGroupHeartbeatRequestTest to test plan.
>>>> 
>>>> LB01: Add the removal of StreamGroupPartitionMetadataKey /
>>>> StreamGrouprtitionMetadataValue to public interface change section.
>>>> 
>>>> Thank you.
>>>> 
>>>> Regards,
>>>> PoAn
>>>> 
>>>>> On Apr 9, 2025, at 5:11 PM, Lucas Brutschy 
>>>>> <lbruts...@confluent.io.INVALID <mailto:lbruts...@confluent.io.INVALID>>
>> wrote:
>>>>> 
>>>>> Hi PoAn,
>>>>> 
>>>>> LB01: please add the removal of StreamsGroupPartitionMetadataKey /
>>>>> StreamsGroupPartitionMetadataValue to the KIP. Since these were not
>>>>> yet included in 4.0, we can just remove them as long as this KIP hits
>>>>> 4.1. I can help with the integration into the `streamsGroupHeartbeat`,
>>>>> as it will be a little different, but we do not need to call this out
>>>>> in the KIP.
>>>>> 
>>>>> Thanks for your work on this!
>>>>> 
>>>>> Cheers,
>>>>> Lucas
>>>>> 
>>>>> On Wed, Apr 9, 2025 at 9:59 AM David Jacot <dja...@confluent.io.invalid 
>>>>> <mailto:dja...@confluent.io.invalid>>
>> wrote:
>>>>>> 
>>>>>> Hi PoAn,
>>>>>> 
>>>>>> I finally had a bit of time to review your KIP. First, let me say
>> that the
>>>>>> KIP is well written! I have some more comments:
>>>>>> 
>>>>>> DJ01: In the motivation, could you please mention that we actually
>> removed
>>>>>> triggering rebalances based on rack changes in 4.0? You explained
>> very well
>>>>>> why we removed it but it is not clear that we removed it.
>>>>>> 
>>>>>> DJ02: We cannot delete ConsumerGroupPartitionMetadataKey
>>>>>> and ConsumerGroupPartitionMetadataValue because the coordinator must
>> still
>>>>>> be able to read the record from the log when the cluster is upgraded.
>>>>>> However, we can deprecate them.
>>>>>> 
>>>>>> DJ03: Could you clarify how the cache will be scoped? My
>> understanding is
>>>>>> that we will maintain a cache per GroupCoordinatorShard instance. Is
>> this
>>>>>> correct?
>>>>>> 
>>>>>> DJ04: Regarding the topic hash function, would it be possible to
>> specify
>>>>>> how the hash will be computed instead of providing the signature of
>> the
>>>>>> method?
>>>>>> 
>>>>>> DJ05: I have a general question about how you propose to combine
>> hashes. Is
>>>>>> using a sum enough? I was looking at the Guava implementation and
>> they also
>>>>>> apply a "final mix" to ensure an avalanche effect. It would be great
>> to
>>>>>> elaborate a bit more on this in the KIP.
>>>>>> 
>>>>>> DJ06: After the upgrade, we need to ensure that a tombstone is
>> written for
>>>>>> the ConsumerGroupPartitionMetadata record if it was present. I
>> suppose that
>>>>>> this is something that we could do when the next metadata hash is
>> computed.
>>>>>> Have you thought about it?
>>>>>> 
>>>>>> DJ07: I wonder whether we should gate the change with
>> `group.version`. My
>>>>>> concern is that during upgrade, not all the coordinators will support
>> the
>>>>>> new way and groups may bounce between those coordinators as their
>>>>>> underlying __consumer_offsets partitions are moved within the cluster
>>>>>> (during the roll). This may trigger unnecessary rebalances. One way to
>>>>>> avoid this is to gate the change with `group.version` which is only
>> bumped
>>>>>> at the end of the cluster upgrade process. What do you think?
>>>>>> 
>>>>>> DJ08: Regarding the test plan, we should also extend
>>>>>> ConsumerGroupHeartbeatRequestTest to cover the new feature.
>>>>>> 
>>>>>> Thanks for your hard work on this one. Let's try to get it in 4.1.
>>>>>> 
>>>>>> Best,
>>>>>> David
>>>>>> 
>>>>>> On Mon, Mar 24, 2025 at 8:17 PM Jeff Kim
>> <jeff....@confluent.io.invalid <mailto:jeff....@confluent.io.invalid>>
>>>>>> wrote:
>>>>>> 
>>>>>>> Hi PoAn,
>>>>>>> 
>>>>>>> Thanks for the clarification!
>>>>>>> 
>>>>>>> Best,
>>>>>>> Jeff
>>>>>>> 
>>>>>>> On Mon, Mar 24, 2025 at 11:43 AM PoAn Yang <yangp...@gmail.com 
>>>>>>> <mailto:yangp...@gmail.com>>
>> wrote:
>>>>>>> 
>>>>>>>> Hi Jeff,
>>>>>>>> 
>>>>>>>> Thanks for the review.
>>>>>>>> 
>>>>>>>> JK01. Yes, we already maintain `groupByTopics` data structure in the
>>>>>>>> coordinator. If a group leaves,
>>>>>>>> it checks whether a topic is subscribed by any group. If it’s not,
>> remove
>>>>>>>> topic hash from the cache.
>>>>>>>> Please check the sample implementation about
>>>>>>>> GroupMetadataManager#unsubscribeGroupFromTopic
>>>>>>>> in #17444 <https://github.com/apache/kafka/pull/17444>.
>>>>>>>> 
>>>>>>>> JK02: This KIP replaces subscription metadata by a group hash, so
>> the
>>>>>>>> coordinator calculates group
>>>>>>>> hash where we calculated subscription metadata. The trigger points
>> are
>>>>>>>> like a group member is updated,
>>>>>>>> , new group member, new subscribed topic names, new regular
>> expressions,
>>>>>>>> and new metadata (topic change).
>>>>>>>> 
>>>>>>>> Best Regards,
>>>>>>>> PoAn
>>>>>>>> 
>>>>>>>>> On Mar 22, 2025, at 3:25 AM, Jeff Kim
>> <jeff....@confluent.io.INVALID <mailto:jeff....@confluent.io.INVALID>>
>>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>> Hi PoAn,
>>>>>>>>> 
>>>>>>>>> I was late to the discussion but I had some questions.
>>>>>>>>> 
>>>>>>>>> JK01. I foresee scenarios where the cache leaves stale topic hashes
>>>>>>>> around
>>>>>>>>> when a group leaves.
>>>>>>>>> Should we maintain a counter for the number of groups subscribed
>> to the
>>>>>>>>> topic (hash) to only keep active topics?
>>>>>>>>> 
>>>>>>>>> JK02. Can you help me understand when we would actually be
>> computing
>>>>>>>>> group-level hashes, is it on every
>>>>>>>>> heartbeat?
>>>>>>>>> 
>>>>>>>>> Thanks,
>>>>>>>>> Jeff
>>>>>>>>> 
>>>>>>>>> On Wed, Mar 12, 2025 at 11:33 PM PoAn Yang <yangp...@gmail.com 
>>>>>>>>> <mailto:yangp...@gmail.com>>
>> wrote:
>>>>>>>>> 
>>>>>>>>>> Hi David,
>>>>>>>>>> 
>>>>>>>>>> Yes, I will continue working on this.
>>>>>>>>>> 
>>>>>>>>>> DJ02: As Kirk noted earlier, since the topic hash calculation is
>> on
>>>>>>>> server
>>>>>>>>>> side (not client-side), we can safely introduce Guava as a
>> dependency.
>>>>>>>>>> 
>>>>>>>>>> If there is no other discussion, we can start voting in
>>>>>>>>>> https://lists.apache.org/thread/j90htmphjk783p697jjfg1xt8thmy33p.
>> We
>>>>>>>> can
>>>>>>>>>> discuss implementation details in PR
>>>>>>>>>> https://github.com/apache/kafka/pull/17444. I will resolve merge
>>>>>>>>>> conflicts by March 14th.
>>>>>>>>>> 
>>>>>>>>>> Thanks,
>>>>>>>>>> PoAn
>>>>>>>>>> 
>>>>>>>>>>> On Mar 13, 2025, at 12:43 AM, David Jacot <david.ja...@gmail.com
>>> 
>>>>>>>> wrote:
>>>>>>>>>>> 
>>>>>>>>>>> Hi PoAn,
>>>>>>>>>>> 
>>>>>>>>>>> As we are getting closer to releasing 4.0, I think that we can
>> resume
>>>>>>>>>>> working on this one if you are still interested. Are you? I would
>>>>>>> like
>>>>>>>>>>> to have it in 4.1.
>>>>>>>>>>> 
>>>>>>>>>>> Best,
>>>>>>>>>>> David
>>>>>>>>>>> 
>>>>>>>>>>> On Wed, Jan 15, 2025 at 1:26 AM Kirk True <k...@kirktrue.pro>
>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>> Hi all,
>>>>>>>>>>>> 
>>>>>>>>>>>> Hopefully a quick question...
>>>>>>>>>>>> 
>>>>>>>>>>>> KT01. Will clients calculate the topic hash on the client?
>> Based on
>>>>>>>> the
>>>>>>>>>> current state of the KIP and PR, I would have thought "no", but I
>> ask
>>>>>>>> based
>>>>>>>>>> on the discussion around the possible use of Guava on client.
>>>>>>>>>>>> 
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>> Kirk
>>>>>>>>>>>> 
>>>>>>>>>>>> On Mon, Jan 6, 2025, at 9:11 AM, David Jacot wrote:
>>>>>>>>>>>>> Hi PoAn,
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Thanks for the update. I haven't read the updated KIP yet.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> DJ02: I am not sure about using Guava as a dependency. I
>> mentioned
>>>>>>> it
>>>>>>>>>> more
>>>>>>>>>>>>> as an inspiration/reference. I suppose that we could use it on
>> the
>>>>>>>>>> server
>>>>>>>>>>>>> but we should definitely not use it on the client. I am not
>> sure
>>>>>>> how
>>>>>>>>>> others
>>>>>>>>>>>>> feel about it.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Best,
>>>>>>>>>>>>> David
>>>>>>>>>>>>> 
>>>>>>>>>>>>> On Mon, Jan 6, 2025 at 5:21 AM PoAn Yang <yangp...@gmail.com>
>>>>>>> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Hi Chia-Ping / David / Lucas,
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Happy new year and thanks for the review.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> DJ02: Thanks for the suggestion. I updated the PR to use
>> Guava.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> DJ03: Yes, I updated the description to mention ISR change,
>>>>>>>>>>>>>> add altering partition reassignment case, and mention that
>>>>>>>>>>>>>> non-related topic change doesn’t trigger a rebalance.
>>>>>>>>>>>>>> DJ03.1: Yes, I will keep using
>> ModernGroup#requestMetadataRefresh
>>>>>>>>>>>>>> to notify group.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> DJ06: Updated the PR to use Guava Hashing#combineUnordered
>>>>>>>>>>>>>> function to combine topic hash.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> DJ07: Renamed it to MetadataHash.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> DJ08: Added a sample hash function to the KIP and use first
>> byte
>>>>>>> as
>>>>>>>>>> magic
>>>>>>>>>>>>>> byte. This is also included in latest PR.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> DJ09: Added two paragraphs about upgraded and downgraded.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> DJ10: According to Lucas’s comment, I add
>>>>>>> StreamsGroupMetadataValue
>>>>>>>>>> update
>>>>>>>>>>>>>> to this KIP.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>> PoAn
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On Dec 20, 2024, at 3:58 PM, Chia-Ping Tsai <
>> chia7...@gmail.com>
>>>>>>>>>> wrote:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> because assignors are sticky.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> I forgot about that spec again :(
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> David Jacot <david.ja...@gmail.com> 於 2024年12月20日 週五
>> 下午3:41寫道:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Hi Chia-Ping,
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> DJ08: In my opinion, changing the format will be rare so it
>> is
>>>>>>>>>>>>>>>> acceptable if rebalances are triggered in this case on
>>>>>>>>>>>>>>>> upgrade/downgrade. It is also what will happen if a cluster
>> is
>>>>>>>>>>>>>>>> downgraded from 4.1 (with this KIP) to 4.0. The rebalance
>> won't
>>>>>>>>>> change
>>>>>>>>>>>>>>>> anything if the topology of the group is the same because
>>>>>>>> assignors
>>>>>>>>>>>>>>>> are sticky. The default ones are and we recommend custom
>> ones to
>>>>>>>>>> also
>>>>>>>>>>>>>>>> be.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Best,
>>>>>>>>>>>>>>>> David
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> On Fri, Dec 20, 2024 at 2:11 AM Chia-Ping Tsai <
>>>>>>>> chia7...@apache.org
>>>>>>>>>>> 
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> ummm, it does not work for downgrade as the old
>> coordinator has
>>>>>>>> no
>>>>>>>>>> idea
>>>>>>>>>>>>>>>> about new format :(
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> On 2024/12/20 00:57:27 Chia-Ping Tsai wrote:
>>>>>>>>>>>>>>>>>> hi David
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> DJ08:
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> That's a good question. If the "hash" lacks version
>> control,
>>>>>>> it
>>>>>>>>>> could
>>>>>>>>>>>>>>>> trigger a series of unnecessary rebalances. However, adding
>>>>>>>>>> additional
>>>>>>>>>>>>>>>> information ("magic") to the hash does not help the upgraded
>>>>>>>>>> coordinator
>>>>>>>>>>>>>>>> determine the "version." This means that the upgraded
>>>>>>> coordinator
>>>>>>>>>> would
>>>>>>>>>>>>>>>> still trigger unnecessary rebalances because it has no way
>> to
>>>>>>> know
>>>>>>>>>> which
>>>>>>>>>>>>>>>> format to use when comparing the hash.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Perhaps we can add a new field to
>> ConsumerGroupMetadataValue
>>>>>>> to
>>>>>>>>>>>>>>>> indicate the version of the "hash." This would allow the
>>>>>>>>>> coordinator,
>>>>>>>>>>>>>> when
>>>>>>>>>>>>>>>> handling subscription metadata, to compute the old hash and
>>>>>>>>>> determine
>>>>>>>>>>>>>>>> whether an epoch bump is necessary. Additionally, the
>>>>>>> coordinator
>>>>>>>>>> can
>>>>>>>>>>>>>>>> generate a new record to upgrade the hash without requiring
>> an
>>>>>>>> epoch
>>>>>>>>>>>>>> bump.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Another issue is whether the coordinator should cache all
>>>>>>>>>> versions of
>>>>>>>>>>>>>>>> the hash. I believe this is necessary; otherwise, during an
>>>>>>>> upgrade,
>>>>>>>>>>>>>> there
>>>>>>>>>>>>>>>> would be extensive recomputing of old hashes.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> I believe this idea should also work for downgrades, and
>>>>>>> that's
>>>>>>>>>> just
>>>>>>>>>>>>>>>> my two cents.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Best,
>>>>>>>>>>>>>>>>>> Chia-Ping
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> On 2024/12/19 14:39:41 David Jacot wrote:
>>>>>>>>>>>>>>>>>>> Hi PoAn and Chia-Ping,
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Thanks for your responses.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> DJ02: Sorry, I was not clear. I was wondering whether we
>>>>>>> could
>>>>>>>>>>>>>>>> compute the
>>>>>>>>>>>>>>>>>>> hash without having to convert to bytes before. Guava
>> has a
>>>>>>>> nice
>>>>>>>>>>>>>>>> interface
>>>>>>>>>>>>>>>>>>> for this allowing to incrementally add primitive types
>> to the
>>>>>>>>>> hash.
>>>>>>>>>>>>>>>> We can
>>>>>>>>>>>>>>>>>>> discuss this in the PR as it is an implementation detail.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> DJ03: Thanks. I don't think that the replicas are updated
>>>>>>> when
>>>>>>>> a
>>>>>>>>>>>>>>>> broker
>>>>>>>>>>>>>>>>>>> shuts down. What you said applies to the ISR. I suppose
>> that
>>>>>>> we
>>>>>>>>>> can
>>>>>>>>>>>>>>>> rely on
>>>>>>>>>>>>>>>>>>> the ISR changes to trigger updates. It is also worth
>> noting
>>>>>>>>>>>>>>>>>>> that TopicsDelta#changedTopics is updated for every
>> change
>>>>>>>> (e.g.
>>>>>>>>>> ISR
>>>>>>>>>>>>>>>>>>> change, leader change, replicas change, etc.). I suppose
>> that
>>>>>>>> it
>>>>>>>>>> is
>>>>>>>>>>>>>>>> OK but
>>>>>>>>>>>>>>>>>>> it seems that it will trigger refreshes which are not
>>>>>>>> necessary.
>>>>>>>>>>>>>>>> However, a
>>>>>>>>>>>>>>>>>>> rebalance won't be triggered because the hash won't
>> change.
>>>>>>>>>>>>>>>>>>> DJ03.1: I suppose that we will continue to rely on
>>>>>>>>>>>>>>>>>>> ModernGroup#requestMetadataRefresh to notify groups that
>> must
>>>>>>>>>>>>>>>> refresh their
>>>>>>>>>>>>>>>>>>> hashes. Is my understanding correct?
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> DJ05: Fair enough.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> DJ06: You mention in two places that you would like to
>>>>>>> combine
>>>>>>>>>>>>>>>> hashes by
>>>>>>>>>>>>>>>>>>> additioning them. I wonder if this is a good practice.
>>>>>>>>>> Intuitively,
>>>>>>>>>>>>>>>> I would
>>>>>>>>>>>>>>>>>>> have used XOR or hashed the hashed. Guava has a method
>> for
>>>>>>>>>> combining
>>>>>>>>>>>>>>>>>>> hashes. It may be worth looking into the algorithm used.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> DJ07: I would rename "AllTopicHash" to "MetadataHash" in
>>>>>>> order
>>>>>>>>>> to be
>>>>>>>>>>>>>>>> more
>>>>>>>>>>>>>>>>>>> generic.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> DJ08: Regarding the per topic hash, I wonder whether we
>>>>>>> should
>>>>>>>>>>>>>>>> precise in
>>>>>>>>>>>>>>>>>>> the KIP how we will compute it. I had the following in
>> mind:
>>>>>>>>>>>>>>>>>>> hash(topicName; numPartitions; [partitionId;sorted
>> racks]).
>>>>>>> We
>>>>>>>>>> could
>>>>>>>>>>>>>>>> also
>>>>>>>>>>>>>>>>>>> add a magic byte at the first element as a sort of
>> version. I
>>>>>>>> am
>>>>>>>>>> not
>>>>>>>>>>>>>>>> sure
>>>>>>>>>>>>>>>>>>> whether it is needed though. I was thinking about this
>> while
>>>>>>>>>>>>>>>> imagining how
>>>>>>>>>>>>>>>>>>> we would handle changing the format in the future.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> DJ09: It would be great if we could provide more details
>>>>>>> about
>>>>>>>>>>>>>>>> backward
>>>>>>>>>>>>>>>>>>> compatibility. What happens when the cluster is upgraded
>> or
>>>>>>>>>>>>>>>> downgraded?
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> DJ10: We should update KIP-1071. It may be worth pigging
>> them
>>>>>>>> in
>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>> discussion thread of KIP-1071.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Best,
>>>>>>>>>>>>>>>>>>> David
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> On Tue, Dec 17, 2024 at 9:25 AM PoAn Yang <
>>>>>>> yangp...@gmail.com>
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Hi Chia-Ping / David / Andrew,
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Thanks for the review and suggestions.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> DJ01: Removed all implementation details.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> DJ02: Does the “incrementally” mean that we only
>> calculate
>>>>>>> the
>>>>>>>>>>>>>>>> difference
>>>>>>>>>>>>>>>>>>>> parts?
>>>>>>>>>>>>>>>>>>>> For example, if the number of partition change, we only
>>>>>>>>>> calculate
>>>>>>>>>>>>>>>> the hash
>>>>>>>>>>>>>>>>>>>> of number of partition and reconstruct it to the topic
>> hash.
>>>>>>>>>>>>>>>>>>>> IMO, we only calculate topic hash one time. With cache
>>>>>>>>>> mechanism,
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>> value can be reused in different groups on a same
>> broker.
>>>>>>>>>>>>>>>>>>>> The CPU usage for this part is not very high.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> DJ03: Added the update path to KIP for both cases.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> DJ04: Yes, it’s a good idea. With cache mechanism and
>> single
>>>>>>>>>> hash
>>>>>>>>>>>>>>>> per
>>>>>>>>>>>>>>>>>>>> group, we can balance cpu and disk usage.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> DJ05: Currently, the topic hash is only used in
>> coordinator.
>>>>>>>>>>>>>>>> However, the
>>>>>>>>>>>>>>>>>>>> metadata image is used in many different places.
>>>>>>>>>>>>>>>>>>>> How about we move the hash to metadata image when we
>> find
>>>>>>> more
>>>>>>>>>> use
>>>>>>>>>>>>>>>> cases?
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> AS1, AS2: Thanks for the reminder. I will simply delete
>>>>>>>>>>>>>>>>>>>> ShareGroupPartitionMetadataKey/Value and add a new
>> field to
>>>>>>>>>>>>>>>>>>>> ShareGroupMetadataValue.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Best,
>>>>>>>>>>>>>>>>>>>> PoAn
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> On Dec 17, 2024, at 5:50 AM, Andrew Schofield <
>>>>>>>>>>>>>>>>>>>> andrew_schofield_j...@outlook.com> wrote:
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Hi PoAn,
>>>>>>>>>>>>>>>>>>>>> Thanks for the KIP.
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> AS1: From the point of view of share groups, the API
>> and
>>>>>>>> record
>>>>>>>>>>>>>>>> schema
>>>>>>>>>>>>>>>>>>>>> definitions are unstable in AK 4.0. In AK 4.1, we will
>>>>>>> start
>>>>>>>>>>>>>>>> supporting
>>>>>>>>>>>>>>>>>>>> proper
>>>>>>>>>>>>>>>>>>>>> versioning. As a result, I think you do not need to
>>>>>>> deprecate
>>>>>>>>>>>>>>>> the fields
>>>>>>>>>>>>>>>>>>>> in the
>>>>>>>>>>>>>>>>>>>>> ShareGroupPartitionMetadataValue. Just include the
>> schema
>>>>>>> for
>>>>>>>>>>>>>>>> the fields
>>>>>>>>>>>>>>>>>>>>> which are actually needed, and I'll update the schema
>> in
>>>>>>> the
>>>>>>>>>>>>>>>> code when
>>>>>>>>>>>>>>>>>>>>> the KIP is implemented.
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> AS2: In the event that DJ04 actually removes the need
>> for
>>>>>>>>>>>>>>>>>>>>> ConsumerGroupPartitionMetadataKey/Value entirely, I
>> would
>>>>>>>>>> simply
>>>>>>>>>>>>>>>>>>>>> delete ShareGroupPartitionMetadataKey/Value, assuming
>> that
>>>>>>> it
>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>>>> accepted in time for AK 4.1.
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>>> Andrew
>>>>>>>>>>>>>>>>>>>>> ________________________________________
>>>>>>>>>>>>>>>>>>>>> From: Chia-Ping Tsai <chia7...@apache.org>
>>>>>>>>>>>>>>>>>>>>> Sent: 16 December 2024 16:27
>>>>>>>>>>>>>>>>>>>>> To: dev@kafka.apache.org <dev@kafka.apache.org>
>>>>>>>>>>>>>>>>>>>>> Subject: Re: [DISCUSS] KIP-1101: Trigger rebalance on
>> rack
>>>>>>>>>>>>>>>> topology
>>>>>>>>>>>>>>>>>>>> changes
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> hi David
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> DJ05
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> One of the benefits of having a single hash per group
>>>>>>> (DJ04)
>>>>>>>> is
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>> reduction in the size of stored data. Additionally, the
>> cost
>>>>>>>> of
>>>>>>>>>>>>>>>>>>>> re-computing can be minimized thanks to caching. So I'm
>> + 1
>>>>>>> to
>>>>>>>>>>>>>>>> DJ04.
>>>>>>>>>>>>>>>>>>>> However, the advantage of storing the topic cache in the
>>>>>>>>>> metadata
>>>>>>>>>>>>>>>> image is
>>>>>>>>>>>>>>>>>>>> somewhat unclear to me. Could you please provide more
>>>>>>> details
>>>>>>>> on
>>>>>>>>>>>>>>>> what you
>>>>>>>>>>>>>>>>>>>> mean by "tight"?Furthermore, since the metadata image
>> is a
>>>>>>>>>>>>>>>> thread-safe
>>>>>>>>>>>>>>>>>>>> object, we need to ensure that the lazy initialization
>> is
>>>>>>> also
>>>>>>>>>>>>>>>> thread-safe.
>>>>>>>>>>>>>>>>>>>> If no other components require the cache, it would be
>> better
>>>>>>>> to
>>>>>>>>>>>>>>>> keep the
>>>>>>>>>>>>>>>>>>>> caches within the coordinator.
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Best,
>>>>>>>>>>>>>>>>>>>>> Chia-Ping
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> On 2024/12/16 14:01:35 David Jacot wrote:
>>>>>>>>>>>>>>>>>>>>>> Hi PoAn,
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> Thanks for the KIP. I have some comments about it.
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> DJ01: Please, remove all the code from the KIP. We
>> only
>>>>>>> care
>>>>>>>>>>>>>>>> about
>>>>>>>>>>>>>>>>>>>> public
>>>>>>>>>>>>>>>>>>>>>> interface changes, not about implementation details.
>>>>>>>>>>>>>>>>>>>>>> DJ02: Regarding the hash computation, I agree that we
>>>>>>> should
>>>>>>>>>> use
>>>>>>>>>>>>>>>>>>>> Murmur3.
>>>>>>>>>>>>>>>>>>>>>> However, I don't quite like the implementation that
>> you
>>>>>>>>>> shared.
>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>>> wonder if
>>>>>>>>>>>>>>>>>>>>>> we could make it work incrementally instead of
>> computing a
>>>>>>>>>> hash
>>>>>>>>>>>>>>>> of
>>>>>>>>>>>>>>>>>>>>>> everything and combining them.
>>>>>>>>>>>>>>>>>>>>>> DJ03: Regarding the cache, my understanding is that
>> the
>>>>>>>> cache
>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>>> populated
>>>>>>>>>>>>>>>>>>>>>> when a topic without hash is seen in a HB request and
>> the
>>>>>>>>>> cache
>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>>> cleaned
>>>>>>>>>>>>>>>>>>>>>> up when topics are deleted based on the metadata
>> image.
>>>>>>>>>>>>>>>> However, the
>>>>>>>>>>>>>>>>>>>> update
>>>>>>>>>>>>>>>>>>>>>> path is not clear. Let's say that a partition is
>> added to
>>>>>>> a
>>>>>>>>>>>>>>>> topic, how
>>>>>>>>>>>>>>>>>>>> does
>>>>>>>>>>>>>>>>>>>>>> it detect it? Let's also imagine that the racks of a
>>>>>>>> partition
>>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>>>>>>> changed, how does it detect it? In the KIP, it would
>> be
>>>>>>> nice
>>>>>>>>>> to
>>>>>>>>>>>>>>>> be clear
>>>>>>>>>>>>>>>>>>>>>> about those.
>>>>>>>>>>>>>>>>>>>>>> DJ04: I wonder whether we should go with a single
>> hash per
>>>>>>>>>>>>>>>> group. Your
>>>>>>>>>>>>>>>>>>>>>> argument against it is that it would require to
>> re-compute
>>>>>>>> the
>>>>>>>>>>>>>>>> hash of
>>>>>>>>>>>>>>>>>>>> all
>>>>>>>>>>>>>>>>>>>>>> the topics when it needs to be computed. In my
>> opinion, we
>>>>>>>>>> could
>>>>>>>>>>>>>>>>>>>> leverage
>>>>>>>>>>>>>>>>>>>>>> the cached hash per topic to compute the hash of all
>> the
>>>>>>>>>>>>>>>> subscribed
>>>>>>>>>>>>>>>>>>>> ones.
>>>>>>>>>>>>>>>>>>>>>> We could basically combine all the hashes without
>> having
>>>>>>> to
>>>>>>>>>>>>>>>> compute all
>>>>>>>>>>>>>>>>>>>> of
>>>>>>>>>>>>>>>>>>>>>> them. This approach has a few benefits. 1) We could
>> get
>>>>>>> rid
>>>>>>>> of
>>>>>>>>>>>>>>>>>>>>>> the ConsumerGroupPartitionMetadata record as we could
>>>>>>> store
>>>>>>>>>> the
>>>>>>>>>>>>>>>> hash
>>>>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>>>>>>>> the group epoch. 2) We could get rid of the Map that
>> we
>>>>>>> keep
>>>>>>>>>> in
>>>>>>>>>>>>>>>> each
>>>>>>>>>>>>>>>>>>>> group
>>>>>>>>>>>>>>>>>>>>>> to store the hashed corresponding to the subscribed
>>>>>>> topics.
>>>>>>>>>>>>>>>>>>>>>> DJ05: Regarding the cache again, I wonder if we should
>>>>>>>>>> actually
>>>>>>>>>>>>>>>> store
>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>> hash in the metadata image instead of maintaining it
>>>>>>>> somewhere
>>>>>>>>>>>>>>>> else. We
>>>>>>>>>>>>>>>>>>>>>> could still lazily compute it. The benefit is that the
>>>>>>> value
>>>>>>>>>>>>>>>> would be
>>>>>>>>>>>>>>>>>>>> tight
>>>>>>>>>>>>>>>>>>>>>> to the topic. I have not really looked into it. Would
>> it
>>>>>>> be
>>>>>>>> an
>>>>>>>>>>>>>>>> option?
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> I'll be away for two weeks starting from Saturday. I
>>>>>>> kindly
>>>>>>>>>> ask
>>>>>>>>>>>>>>>> you to
>>>>>>>>>>>>>>>>>>>> wait
>>>>>>>>>>>>>>>>>>>>>> on me if we cannot conclude this week.
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> Best,
>>>>>>>>>>>>>>>>>>>>>> David
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> On Tue, Nov 5, 2024 at 1:43 PM Frank Yang <
>>>>>>>> yangp...@gmail.com
>>>>>>>>>>> 
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> Hi Chia-Ping,
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> Thanks for the review and suggestions.
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> Q0: Add how rack change and how it affects topic
>>>>>>> partition.
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> Q1: Add why we need a balance algorithm to Motivation
>>>>>>>>>> section.
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> Q2: After checking again, we don’t need to update
>> cache
>>>>>>>> when
>>>>>>>>>>>>>>>> we replay
>>>>>>>>>>>>>>>>>>>>>>> records. We only need to renew it in consumer
>> heartbeat.
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> Q3: Add a new section “Topic Hash Function”.
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> Thanks.
>>>>>>>>>>>>>>>>>>>>>>> PoAn
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> On Nov 1, 2024, at 4:39 PM, Chia-Ping Tsai <
>>>>>>>>>>>>>>>> chia7...@gmail.com>
>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> hi PoAn
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Thanks for for this KIP!
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Q0: Could you add more details about `A topic
>> partition
>>>>>>>> has
>>>>>>>>>>>>>>>> rack
>>>>>>>>>>>>>>>>>>>> change`?
>>>>>>>>>>>>>>>>>>>>>>>> IIRC, the "rack change" includes both follower and
>>>>>>> leader,
>>>>>>>>>>>>>>>> right?
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Q1: Could you please add the 'concerns' we
>> discussed to
>>>>>>>> the
>>>>>>>>>>>>>>>> Motivation
>>>>>>>>>>>>>>>>>>>>>>>> section? This should include topics like
>> 'computations'
>>>>>>>> and
>>>>>>>>>>>>>>>> 'space
>>>>>>>>>>>>>>>>>>>>>>> usage'.
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Q2: `The group coordinator can leverage it to add a
>> new
>>>>>>>>>> topic
>>>>>>>>>>>>>>>>>>>> hash.`This
>>>>>>>>>>>>>>>>>>>>>>>> description seems a bit off to me. Why do we need to
>>>>>>>> update
>>>>>>>>>>>>>>>> the cache
>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>>> this phase? The cache is intended to prevent
>> duplicate
>>>>>>>>>>>>>>>> computations
>>>>>>>>>>>>>>>>>>>>>>> caused
>>>>>>>>>>>>>>>>>>>>>>>> by heartbeat requests that occur between two
>> metadata
>>>>>>>> change
>>>>>>>>>>>>>>>> events.
>>>>>>>>>>>>>>>>>>>>>>>> Therefore, we could even remove the changed topics
>> from
>>>>>>>>>>>>>>>> caches on a
>>>>>>>>>>>>>>>>>>>>>>>> metadata change, as the first heartbeat request
>> would
>>>>>>>> update
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>> caches
>>>>>>>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>>>>>>>>> all changed topics.
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Q3: Could you please include a section about the
>> choice
>>>>>>> of
>>>>>>>>>>>>>>>> hash
>>>>>>>>>>>>>>>>>>>>>>>> implementation? The hash implementation must be
>>>>>>> consistent
>>>>>>>>>>>>>>>> across
>>>>>>>>>>>>>>>>>>>>>>> different
>>>>>>>>>>>>>>>>>>>>>>>> JDKs, so we use Murmur3 to generate the hash value.
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Best,
>>>>>>>>>>>>>>>>>>>>>>>> Chia-Ping
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Frank Yang <yangp...@gmail.com> 於 2024年11月1日 週五
>>>>>>> 下午3:57寫道:
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> Hi all,
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> I would like to start a discussion thread on
>> KIP-1101.
>>>>>>>>>>>>>>>> Trigger
>>>>>>>>>>>>>>>>>>>> rebalance
>>>>>>>>>>>>>>>>>>>>>>>>> on rack topology changes. In this KIP, we aim to
>> use
>>>>>>> less
>>>>>>>>>>>>>>>> memory /
>>>>>>>>>>>>>>>>>>>> disk
>>>>>>>>>>>>>>>>>>>>>>>>> resources to detect rack changes in the new
>>>>>>> coordinator.
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-1101%3A+Trigger+rebalance+on+rack+topology+changes
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> Please take a look and feel free to share any
>> thoughts.
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> Thanks.
>>>>>>>>>>>>>>>>>>>>>>>>> PoAn

Reply via email to