40 lines
825 B
Go
40 lines
825 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) *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,
|
|
}),
|
|
}
|
|
}
|
|
|
|
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()
|
|
}
|