читать __consumer_offsets с помощью kafka go - PullRequest
0 голосов
/ 11 июня 2019

Я хочу прочитать из темы __consumer_offsets с помощью этой библиотеки: https://github.com/segmentio/kafka-go

Моя проблема в том, что, если я не укажу раздел, ничего не произойдет. По умолчанию в этой теме 100 разделов, кажется неоправданным запрашивать у kafka список разделов, а затем перебирать их, чтобы прочитать их, и я надеюсь, что в библиотеке уже есть существующий метод, который читает сообщения со всех разделов. в теме.

В настоящее время работает следующее, после того как я проверил с помощью kafkacat, что в разделе 15 раздела __consumer_offsets есть сообщения:

  r := kafka.NewReader(kafka.ReaderConfig{
    Brokers:   []string{"kafka:9092"},
    Topic:     "__consumer_offsets",
    Partition: 15
  })
  r.SetOffset(0)

  for {
    m, err := r.ReadMessage(context.Background())
    if err != nil {
      log.Println("Error while trying to read message")
      log.Fatal(err)
      break
    }
    log.Printf("message at offset %d\n", m.Offset)
  }

  r.Close()

Я полагаю, что выбор раздела должен быть прозрачным на уровне пользователя, если в этом нет необходимости. Я не прав?

Есть ли способ чтения из темы независимо от того, в каких разделах находятся сообщения? или перефразировать, читать со всех разделов?

1 Ответ

0 голосов
/ 11 июня 2019

Используйте API группы потребителей, и вам не нужно указывать разделы.

https://github.com/segmentio/kafka-go#consumer-groups

// GroupID holds the optional consumer group id.  If GroupID is specified, then
// Partition should NOT be specified e.g. 0
GroupID string


// Partition to read messages from.  Either Partition or GroupID may
// be assigned, but not both
Partition int

https://godoc.org/github.com/segmentio/kafka-go#ReaderConfig

...