You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							36 lines
						
					
					
						
							1.2 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							36 lines
						
					
					
						
							1.2 KiB
						
					
					
				
								package coordinator
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									cmap "github.com/orcaman/concurrent-map/v2"
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/mq/topic"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								type ConsumerGroupInstance struct {
							 | 
						|
									ClientId string
							 | 
						|
									// the consumer group instance may not have an active partition
							 | 
						|
									Partition *topic.Partition
							 | 
						|
									// processed message count
							 | 
						|
									ProcessedMessageCount int64
							 | 
						|
								}
							 | 
						|
								type ConsumerGroup struct {
							 | 
						|
									// map a client id to a consumer group instance
							 | 
						|
									ConsumerGroupInstances cmap.ConcurrentMap[string, *ConsumerGroupInstance]
							 | 
						|
									MinimumActiveInstances int32
							 | 
						|
									MaximumActiveInstances int32
							 | 
						|
								}
							 | 
						|
								type TopicConsumerGroups struct {
							 | 
						|
									// map a consumer group name to a consumer group
							 | 
						|
									ConsumerGroups cmap.ConcurrentMap[string, *ConsumerGroup]
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// Coordinator coordinates the instances in the consumer group for one topic.
							 | 
						|
								// It is responsible for:
							 | 
						|
								// 1. Assigning partitions to consumer instances.
							 | 
						|
								// 2. Reassigning partitions when a consumer instance is down.
							 | 
						|
								// 3. Reassigning partitions when a consumer instance is up.
							 | 
						|
								type Coordinator struct {
							 | 
						|
									// map client id to subscriber
							 | 
						|
									Subscribers cmap.ConcurrentMap[string, *ConsumerGroupInstance]
							 | 
						|
									// map topic name to consumer groups
							 | 
						|
									TopicSubscribers cmap.ConcurrentMap[string, map[string]TopicConsumerGroups]
							 | 
						|
								}
							 |