9 changed files with 144 additions and 35 deletions
-
11test/kafka/kafka-client-loadtest/go.mod
-
14test/kafka/kafka-client-loadtest/go.sum
-
86test/kafka/kafka-client-loadtest/test_offset_fetch.go
-
12weed/mq/kafka/consumer_offset/filer_storage.go
-
11weed/mq/kafka/consumer_offset/filer_storage_test.go
-
3weed/mq/kafka/protocol/find_coordinator.go
-
6weed/mq/kafka/protocol/handler.go
-
25weed/mq/kafka/protocol/offset_management.go
-
11weed/util/log_buffer/log_read_stateless.go
@ -0,0 +1,86 @@ |
|||
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 |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue