Я всегда получаю 0 разделов при вызове SendMessage (msg). Я указываю 12 через командную строку - PullRequest
0 голосов
/ 09 мая 2018

Какие значения конфигурации вы используете для Sarama и Kafka?

Кафка Версия: kafka_2.12-1.1.0.tgz Версия Go: 1.9.1

package kafka

import (
    "flag"
    "fmt"
    "log"
    "strings"

    "github.com/Shopify/sarama"
)

var partition = flag.Int("partition", 12, "The partition to produce to.")

func Start_producer(payload []byte) {
    flag.Parse()
    s := "mydata"
    topic := &s
    // brokers := &[]string{"172.25.33.175:9092,172.25.33.176:9092,172.25.33.177:9092"}
    // brokers := []string{"172.25.33.175:9092,172.25.33.176:9092,172.25.33.177:9092"}

    config := sarama.NewConfig()
    config.Producer.RequiredAcks = sarama.WaitForAll
    config.Producer.Retry.Max = 5
    config.Producer.Return.Successes = true
    producer, err := sarama.NewSyncProducer(strings.Split("172.25.33.175:9092,172.25.33.176:9092,172.25.33.177:9092", ","), config) //default port

    if err != nil {
        log.Println("ERRR")
        panic(err)
    }
    defer func() {
        if err := producer.Close(); err != nil {
            panic(err)
        }
    }()
    msg := &sarama.ProducerMessage{
        Topic:     *topic,
        Value:     sarama.StringEncoder(payload),
        Partition: int32(*partition),
    }
    fmt.Println("XXXX: ", msg.Partition)
    partition, offset, err := producer.SendMessage(msg)
    if err != nil {
        panic(err)
    }
    fmt.Println()
    fmt.Printf("Message is stored in topic(%s)/partition(%d)/offset(%d)\n", *topic, partition, offset)
    fmt.Println("--------------------------------------------------")
    fmt.Println(partition)

}

Описание проблемы

Я пытаюсь отправить поток сообщений моему брокеру Kafka, у меня 3 заданных узла, и я хочу, чтобы сообщения были в 12 разделах, но когда я вызываю SendMessage (msg), он возвращает 0 разделов. Это почему? Почему я не могу отправлять свои сообщения в разделах?

1 Ответ

0 голосов
/ 09 мая 2018

Вы не указали ManualPartitioner в своей конфигурации, поэтому он будет использовать значение по умолчанию вместо того, чтобы подчиняться тому, что вы сказали в поле раздела.

Добавить в конфигурацию

config.Producer.Partitioner = NewManualPartitioner 

Теперь следует соблюдать значение вашего раздела

(Документы: https://godoc.org/github.com/Shopify/sarama#example-Partitioner--Manual)

...