go-kratos/pkg/kafka/consumer.go

41 lines
872 B
Go

package kafka
import (
"errors"
"io"
"syscall"
"time"
"github.com/segmentio/kafka-go"
)
type KafkaConsumer struct {
Reader *kafka.Reader
}
func NewKafkaReader(brokers []string, topic string, partition int, groupID string) *KafkaConsumer {
return &KafkaConsumer{
Reader: kafka.NewReader(kafka.ReaderConfig{
Brokers: brokers,
Topic: topic,
Partition: partition,
MinBytes: 10e3,
MaxBytes: 10e6,
MaxWait: 500 * time.Millisecond,
CommitInterval: 5 * time.Second,
// GroupID: groupID,
}),
}
}
func (c *KafkaConsumer) IsTransientNetworkError(err error) bool {
return errors.Is(err, io.ErrUnexpectedEOF) ||
errors.Is(err, syscall.ECONNREFUSED) ||
errors.Is(err, syscall.ECONNRESET) ||
errors.Is(err, syscall.EPIPE)
}
func (c *KafkaConsumer) Close() error {
return c.Reader.Close()
}