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() }