github.com/tuingking/flamingo@v0.0.0-20220403134817-2796ae0e84ca/cmd/consumer/main.go (about)

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"sync"
     7  	"time"
     8  
     9  	"github.com/pkg/errors"
    10  	"github.com/segmentio/kafka-go"
    11  	"github.com/sirupsen/logrus"
    12  )
    13  
    14  var wg sync.WaitGroup
    15  
    16  const topic = "payment.success"
    17  
    18  func main() {
    19  
    20  	wg.Add(3)
    21  
    22  	go func() {
    23  		consumer1(topic)
    24  		wg.Done()
    25  	}()
    26  
    27  	go func() {
    28  		consumer2(topic)
    29  		wg.Done()
    30  	}()
    31  
    32  	// go func() {
    33  	// 	consumer3(topic)
    34  	// 	wg.Done()
    35  	// }()
    36  
    37  	// go func() {
    38  	// 	consumer4(topic)
    39  	// 	wg.Done()
    40  	// }()
    41  
    42  	wg.Wait()
    43  }
    44  
    45  func consumer1(topic string) {
    46  	logrus.Info("Start Consumer 1")
    47  	r := kafka.NewReader(kafka.ReaderConfig{
    48  		Brokers: []string{"localhost:9092"},
    49  		GroupID: "shipping",
    50  		Topic:   topic,
    51  		// Partition:   0,
    52  		StartOffset: kafka.LastOffset,
    53  		// Logger:      kafka.LoggerFunc(logInfof),
    54  		// ErrorLogger: kafka.LoggerFunc(logErrorf),
    55  	})
    56  	defer r.Close()
    57  
    58  	for {
    59  		m, err := r.ReadMessage(context.Background())
    60  		if err != nil {
    61  			logrus.Error(errors.Wrap(err, "read message"))
    62  			break
    63  		}
    64  
    65  		logrus.Infof("[CONSUMER-02] GroupID: %v, GroupTopic: %v", r.Config().GroupID, r.Config().GroupTopics)
    66  		logrus.Infof("[CONSUMER-02] Lag: %v", r.Stats().Lag)
    67  		logrus.Infof("[CONSUMER-01] p:%v offset:%v key:%s val:%s\n", m.Partition, m.Offset, string(m.Key), string(m.Value))
    68  	}
    69  
    70  	logrus.Info("End Consumer 1")
    71  }
    72  
    73  func consumer2(topic string) {
    74  
    75  	r := kafka.NewReader(kafka.ReaderConfig{
    76  		Brokers: []string{"localhost:9092"},
    77  		GroupID: "shipping",
    78  		Topic:   topic,
    79  		// Partition:   1,
    80  		StartOffset: kafka.LastOffset,
    81  		// MinBytes:    5,
    82  		// MaxBytes:    1e6,
    83  		// wait for at most 3 seconds before receiving new data
    84  		MaxWait: 1 * time.Millisecond,
    85  		// Logger:      kafka.LoggerFunc(logInfof),
    86  		// ErrorLogger: kafka.LoggerFunc(logErrorf),
    87  	})
    88  	defer r.Close()
    89  
    90  	for {
    91  		m, err := r.ReadMessage(context.Background())
    92  		if err != nil {
    93  			logrus.Error(errors.Wrap(err, "read message"))
    94  			break
    95  		}
    96  
    97  		logrus.Infof("[CONSUMER-02] GroupID: %v, GroupTopic: %v, Topic: %v", r.Config().GroupID, r.Config().GroupTopics, r.Config().Topic)
    98  		logrus.Infof("[CONSUMER-02] Lag: %v", r.Stats().Lag)
    99  		logrus.Infof("[CONSUMER-02] p:%v offset:%v key:%s val:%s\n", m.Partition, m.Offset, string(m.Key), string(m.Value))
   100  	}
   101  
   102  	logrus.Info("End Consumer 2")
   103  }
   104  
   105  func consumer3(topic string) {
   106  	logrus.Info("Start Consumer 3")
   107  	r := kafka.NewReader(kafka.ReaderConfig{
   108  		Brokers: []string{"localhost:9092"},
   109  		GroupID: "shipping",
   110  		Topic:   topic,
   111  		// Partition:   1,
   112  		StartOffset: kafka.LastOffset,
   113  		// MinBytes:    5,
   114  		// MaxBytes:    1e6,
   115  		// wait for at most 3 seconds before receiving new data
   116  		MaxWait: 1 * time.Millisecond,
   117  		// Logger:      kafka.LoggerFunc(logInfof),
   118  		// ErrorLogger: kafka.LoggerFunc(logErrorf),
   119  	})
   120  	defer r.Close()
   121  
   122  	for {
   123  		m, err := r.ReadMessage(context.Background())
   124  		if err != nil {
   125  			logrus.Error(errors.Wrap(err, "read message"))
   126  			break
   127  		}
   128  
   129  		logrus.Infof("[CONSUMER-03] p:%v offset:%v key:%s val:%s\n", m.Partition, m.Offset, string(m.Key), string(m.Value))
   130  	}
   131  
   132  	logrus.Info("End Consumer 3")
   133  }
   134  
   135  func consumer4(topic string) {
   136  	logrus.Info("Start Consumer 4")
   137  	r := kafka.NewReader(kafka.ReaderConfig{
   138  		Brokers: []string{"localhost:9092"},
   139  		GroupID: "shipping",
   140  		Topic:   topic,
   141  		// Partition:   1,
   142  		StartOffset: kafka.LastOffset,
   143  		// MinBytes:    5,
   144  		// MaxBytes:    1e6,
   145  		// wait for at most 3 seconds before receiving new data
   146  		MaxWait: 1 * time.Millisecond,
   147  		// Logger:      kafka.LoggerFunc(logInfof),
   148  		// ErrorLogger: kafka.LoggerFunc(logErrorf),
   149  	})
   150  	defer r.Close()
   151  
   152  	for {
   153  		m, err := r.ReadMessage(context.Background())
   154  		if err != nil {
   155  			logrus.Error(errors.Wrap(err, "read message"))
   156  			break
   157  		}
   158  
   159  		logrus.Infof("[CONSUMER-04] p:%v offset:%v key:%s val:%s\n", m.Partition, m.Offset, string(m.Key), string(m.Value))
   160  	}
   161  
   162  	logrus.Info("End Consumer 4")
   163  }
   164  
   165  func logInfof(msg string, a ...interface{}) {
   166  	logrus.Infof(msg, a...)
   167  	fmt.Println()
   168  }
   169  
   170  func logErrorf(msg string, a ...interface{}) {
   171  	logrus.Errorf(msg, a...)
   172  	fmt.Println()
   173  }