簡體   English   中英

Sarama 無法為 Amazon MSK 版本 2.3.1 生成消息

[英]Sarama unable to produce message for Amazon MSK version 2.3.1

我正在使用sarama golang 庫將消息推送到Amazon MSK 直到現在我使用的是 msk 2.2.1 版,我的代碼運行良好,但現在 msk 版本已更改為 2.3.1。 現在,我無法將消息推送到主題。

錯誤:

分區-1

偏移量 -1

請求是針對此代理上不存在的主題或分區。

代碼:

func getKafkaEventClient() (sarama.Client, error) {

    if !setupDone {
        return nil, errors.New("Invalid setup")
    }

    if kafkaEventClient != nil {
        return kafkaEventClient, nil
    }

    err := initKafkaEventClient()
    if err != nil {
        return nil, err
    }

    return kafkaEventClient, nil
}

func initKafkaEventClient() (err error) {
      config := sarama.NewConfig()
      config.Net.TLS.Enable = false
      config.Producer.Return.Successes = true
      config.Version = sarama.V0_10_0_0

      brokers := strings.Split(kafkaEventHost, ",") //split the host into brokers

      kafkaEventClient, err = sarama.NewClient(brokers, config)
      if err != nil {
         log.Println("initKafkaClient: failed to create new kafka client", err)
         return
      }
}

func PushMessageToKafka(message string) {
    client, err := getKafkaEventClient()
    if err != nil {
        return
    }

    producer, err := sarama.NewSyncProducerFromClient(kafkaEventClient)
    if err != nil {
    fmt.Println("PushMessageToKafka: failed to get producer", err)
    return
    }
    var msg sarama.ProducerMessage
    msg.Topic = "some_topic"
    msg.Value = sarama.StringEncoder("some_message")
    p, o, err := producer.SendMessage(&msg)

    fmt.Println("Partition", p)
    fmt.Println("Offset", o)

    if err != nil {
        fmt.Println("PushMessageToKafka: failed to push message to be displayed", err)
     }
}

我已將 sarama 版本更改為 maxVersion 也是config.Version = sarama.MaxVersion ,但它不適用於 Amazon MSK 2.3.1。

請提供一些解決方案。

經過多次調試,我找到了解決方案。 不是版本問題,實際上是返回客戶端的代碼

func getKafkaEventClient() (sarama.Client, error) {

    if !setupDone {
        return nil, errors.New("Invalid setup")
    }

    if kafkaEventClient != nil {
        return kafkaEventClient, nil
    }

    err := initKafkaEventClient()
    if err != nil {
        return nil, err
    }

    return kafkaEventClient, nil
}

這里if kafkaEventClient != nil則返回前一個錯誤的客戶端。 對於每個客戶端,如果代理/主機發生變化,那么我們必須創建一個新客戶端,該客戶端將能夠找到我們想要推送消息的主題。 如果我們正在獲取舊客戶端並將消息推送到存在於不同代理/主機中的主題,那么我們將收到我上面提到的錯誤。

錯誤:

分區-1

偏移量 -1

請求是針對此代理上不存在的主題或分區。

我希望它解決了面臨同樣問題的人的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM