發現在如下代碼中存儲kafka生產者初始化失敗:
config.Version = sarama.V0_10_2_1 //V2_2_0_0
producer, err := sarama.NewSyncProducer(options.Kafka.KafkaBrokerList, config)
if err != nil {
log.Printf("sarama.NewSyncProducer fail:%+v, list=%+v\n", err, options.Kafka.KafkaBrokerList)
return err
}
錯誤信息是:
kafka: client has run out of available brokers to talk to (Is your cluster reachable?)
一開始以為是防火牆沒開端口,但是telnet上去又是對的。
后來發現kafka的服務器版本是:0.10.2.1,而原來的代碼里使用的版本是 V2_2_0_0
代碼中修改版本后正常。
前人挖坑的痛苦:
1.為什么協議版本錯誤不返回版本錯誤的提示?
2.為什么協議做不到向后兼容?