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.
		
		
		
		
		
			
		
			
				
					
					
						
							53 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							53 lines
						
					
					
						
							1.9 KiB
						
					
					
				
								package kafka
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/mq/pub_balancer"
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/pb/schema_pb"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								// Convenience functions for partition mapping used by production code
							 | 
						|
								// The full PartitionMapper implementation is in partition_mapping_test.go for testing
							 | 
						|
								
							 | 
						|
								// MapKafkaPartitionToSMQRange maps a Kafka partition to SeaweedMQ ring range
							 | 
						|
								func MapKafkaPartitionToSMQRange(kafkaPartition int32) (rangeStart, rangeStop int32) {
							 | 
						|
									// Use a range size that divides evenly into MaxPartitionCount (2520)
							 | 
						|
									// Range size 35 gives us exactly 72 Kafka partitions: 2520 / 35 = 72
							 | 
						|
									rangeSize := int32(35)
							 | 
						|
									rangeStart = kafkaPartition * rangeSize
							 | 
						|
									rangeStop = rangeStart + rangeSize - 1
							 | 
						|
									return rangeStart, rangeStop
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// CreateSMQPartition creates a SeaweedMQ partition from a Kafka partition
							 | 
						|
								func CreateSMQPartition(kafkaPartition int32, unixTimeNs int64) *schema_pb.Partition {
							 | 
						|
									rangeStart, rangeStop := MapKafkaPartitionToSMQRange(kafkaPartition)
							 | 
						|
								
							 | 
						|
									return &schema_pb.Partition{
							 | 
						|
										RingSize:   pub_balancer.MaxPartitionCount,
							 | 
						|
										RangeStart: rangeStart,
							 | 
						|
										RangeStop:  rangeStop,
							 | 
						|
										UnixTimeNs: unixTimeNs,
							 | 
						|
									}
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// ExtractKafkaPartitionFromSMQRange extracts the Kafka partition from SeaweedMQ range
							 | 
						|
								func ExtractKafkaPartitionFromSMQRange(rangeStart int32) int32 {
							 | 
						|
									rangeSize := int32(35)
							 | 
						|
									return rangeStart / rangeSize
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// ValidateKafkaPartition validates that a Kafka partition is within supported range
							 | 
						|
								func ValidateKafkaPartition(kafkaPartition int32) bool {
							 | 
						|
									maxPartitions := int32(pub_balancer.MaxPartitionCount) / 35 // 72 partitions
							 | 
						|
									return kafkaPartition >= 0 && kafkaPartition < maxPartitions
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// GetRangeSize returns the range size used for partition mapping
							 | 
						|
								func GetRangeSize() int32 {
							 | 
						|
									return 35
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// GetMaxKafkaPartitions returns the maximum number of Kafka partitions supported
							 | 
						|
								func GetMaxKafkaPartitions() int32 {
							 | 
						|
									return int32(pub_balancer.MaxPartitionCount) / 35 // 72 partitions
							 | 
						|
								}
							 |