22from collections import defaultdict , namedtuple
33from copy import deepcopy
44
5- from kafka .coordinator .assignors .abstract import AbstractPartitionAssignor
6- from kafka .coordinator .assignors .sticky .partition_movements import PartitionMovements
7- from kafka .coordinator .assignors .sticky .sorted_set import SortedSet
8- from kafka .coordinator .protocol import ConsumerProtocolMemberMetadata_v0 , ConsumerProtocolMemberAssignment_v0
9- from kafka .protocol .struct import Struct
10- from kafka .protocol .types import Array , Int32 , Schema , String
5+ from ..abstract import AbstractPartitionAssignor
6+ from .partition_movements import PartitionMovements
7+ from .sorted_set import SortedSet
8+ from .user_data import StickyAssignorUserData
9+ from kafka .protocol .new .consumer .metadata import (
10+ ConsumerProtocolSubscription ,
11+ ConsumerProtocolAssignment ,
12+ )
1113from kafka .structs import TopicPartition
1214
1315log = logging .getLogger (__name__ )
@@ -51,20 +53,6 @@ def remove_if_present(collection, element):
5153 ["subscription" , "partitions" , "generation" ])
5254
5355
54- class StickyAssignorUserDataV1 (Struct ):
55- """
56- Used for preserving consumer's previously assigned partitions
57- list and sending it as user data to the leader during a rebalance
58- """
59-
60- SCHEMA = Schema (
61- ("previous_assignment" , Array (
62- ("topic" , String ("utf-8" )),
63- ("partitions" , Array (Int32 )))),
64- ("generation" , Int32 )
65- )
66-
67-
6856class StickyAssignmentExecutor :
6957 def __init__ (self , cluster , members ):
7058 # a mapping of member_id => StickyAssignorMemberMetadataV1
@@ -605,7 +593,7 @@ def assign(cls, cluster, members):
605593
606594 assignment = {}
607595 for member_id in members :
608- assignment [member_id ] = ConsumerProtocolMemberAssignment_v0 (
596+ assignment [member_id ] = ConsumerProtocolAssignment (
609597 cls .version , sorted (executor .get_final_assignment (member_id )), b''
610598 )
611599 return assignment
@@ -631,7 +619,7 @@ def parse_member_metadata(cls, metadata):
631619 )
632620
633621 try :
634- decoded_user_data = StickyAssignorUserDataV1 .decode (user_data )
622+ decoded_user_data = StickyAssignorUserData .decode (user_data )
635623 except Exception :
636624 # ignore the consumer's previous assignment if it cannot be parsed
637625 log .exception ("Could not parse member data" )
@@ -661,9 +649,9 @@ def _metadata(cls, topics, member_assignment_partitions, generation=-1):
661649 partitions_by_topic = defaultdict (list )
662650 for topic_partition in member_assignment_partitions :
663651 partitions_by_topic [topic_partition .topic ].append (topic_partition .partition )
664- data = StickyAssignorUserDataV1 (list (partitions_by_topic .items ()), generation )
652+ data = StickyAssignorUserData (list (partitions_by_topic .items ()), generation )
665653 user_data = data .encode ()
666- return ConsumerProtocolMemberMetadata_v0 (cls .version , list (topics ), user_data )
654+ return ConsumerProtocolSubscription (cls .version , list (topics ), user_data )
667655
668656 @classmethod
669657 def on_assignment (cls , assignment , generation ):
0 commit comments