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.
		
		
		
		
		
			
		
			
				
					
					
						
							86 lines
						
					
					
						
							2.3 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							86 lines
						
					
					
						
							2.3 KiB
						
					
					
				| package main | |
| 
 | |
| import ( | |
| 	"context" | |
| 	"log" | |
| 	"time" | |
| 
 | |
| 	"github.com/IBM/sarama" | |
| ) | |
| 
 | |
| func main() { | |
| 	log.Println("=== Testing OffsetFetch with Debug Sarama ===") | |
| 
 | |
| 	config := sarama.NewConfig() | |
| 	config.Version = sarama.V2_8_0_0 | |
| 	config.Consumer.Return.Errors = true | |
| 	config.Consumer.Offsets.Initial = sarama.OffsetOldest | |
| 	config.Consumer.Offsets.AutoCommit.Enable = true | |
| 	config.Consumer.Offsets.AutoCommit.Interval = 100 * time.Millisecond | |
| 	config.Consumer.Group.Session.Timeout = 30 * time.Second | |
| 	config.Consumer.Group.Heartbeat.Interval = 3 * time.Second | |
| 
 | |
| 	brokers := []string{"localhost:9093"} | |
| 	group := "test-offset-fetch-group" | |
| 	topics := []string{"loadtest-topic-0"} | |
| 
 | |
| 	log.Printf("Creating consumer group: group=%s brokers=%v topics=%v", group, brokers, topics) | |
| 
 | |
| 	consumerGroup, err := sarama.NewConsumerGroup(brokers, group, config) | |
| 	if err != nil { | |
| 		log.Fatalf("Failed to create consumer group: %v", err) | |
| 	} | |
| 	defer consumerGroup.Close() | |
| 
 | |
| 	ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) | |
| 	defer cancel() | |
| 
 | |
| 	handler := &testHandler{} | |
| 
 | |
| 	log.Println("Starting consumer group session...") | |
| 	log.Println("Watch for 🔍 [SARAMA-DEBUG] logs to trace OffsetFetch calls") | |
| 
 | |
| 	go func() { | |
| 		for { | |
| 			if err := consumerGroup.Consume(ctx, topics, handler); err != nil { | |
| 				log.Printf("Error from consumer: %v", err) | |
| 			} | |
| 			if ctx.Err() != nil { | |
| 				return | |
| 			} | |
| 		} | |
| 	}() | |
| 
 | |
| 	// Wait for context to be done | |
| 	<-ctx.Done() | |
| 	log.Println("Test completed") | |
| } | |
| 
 | |
| type testHandler struct{} | |
| 
 | |
| func (h *testHandler) Setup(session sarama.ConsumerGroupSession) error { | |
| 	log.Printf("✓ Consumer group session setup: generation=%d memberID=%s", session.GenerationID(), session.MemberID()) | |
| 	return nil | |
| } | |
| 
 | |
| func (h *testHandler) Cleanup(session sarama.ConsumerGroupSession) error { | |
| 	log.Println("Consumer group session cleanup") | |
| 	return nil | |
| } | |
| 
 | |
| func (h *testHandler) ConsumeClaim(session sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { | |
| 	log.Printf("✓ Started consuming: topic=%s partition=%d offset=%d", claim.Topic(), claim.Partition(), claim.InitialOffset()) | |
| 
 | |
| 	count := 0 | |
| 	for message := range claim.Messages() { | |
| 		count++ | |
| 		log.Printf("  Received message #%d: offset=%d", count, message.Offset) | |
| 		session.MarkMessage(message, "") | |
| 
 | |
| 		if count >= 5 { | |
| 			log.Println("Received 5 messages, stopping") | |
| 			return nil | |
| 		} | |
| 	} | |
| 	return nil | |
| }
 |