Go 使用Shopify Sarama处理Kafka错误
因此,我尝试将Kafka用于我的应用程序,该应用程序的生产者将操作记录到Kafka MQ中,消费者从MQ中读取操作。由于我的应用程序处于运行状态,我使用Shopify Sarama使这成为可能 现在,我能够读取MQ并使用Go 使用Shopify Sarama处理Kafka错误,go,shopify,apache-kafka,Go,Shopify,Apache Kafka,因此,我尝试将Kafka用于我的应用程序,该应用程序的生产者将操作记录到Kafka MQ中,消费者从MQ中读取操作。由于我的应用程序处于运行状态,我使用Shopify Sarama使这成为可能 现在,我能够读取MQ并使用 fmt.Printf 然而,我真的希望错误处理比控制台打印更好,我愿意付出额外的努力 用户连接的当前代码: mqCfg := sarama.NewConfig() master, err := sarama.NewConsumer([]string{brokerConnec
fmt.Printf
然而,我真的希望错误处理比控制台打印更好,我愿意付出额外的努力
用户连接的当前代码:
mqCfg := sarama.NewConfig()
master, err := sarama.NewConsumer([]string{brokerConnect}, mqCfg)
if err != nil {
panic(err) // Don't want to panic when error occurs, instead handle it
}
以及信息的处理:
go func() {
defer wg.Done()
for message := range consumer.Messages() {
var msgContent Message
_ = json.Unmarshal(message.Value, &msgContent)
fmt.Printf("Reading message of type %s with id : %d\n", msgContent.Type, msgContent.ContentId) //Don't want to print it
}
}()
我的问题(我不熟悉测试卡夫卡,也不熟悉一般的卡夫卡):
func StartKafkaReader(wg *sync.WaitGroup, lastgoodoff int64, out chan<- *Message) (error) {
wg.Add(1)
go func(){
defer wg.Done()
//to track the last known good offset we processed, which is
// updated after each successfully processed event.
saveprogress := func(off int64){
//Save the offset somewhere...a file...
//Ive also used kafka to store progress
//using a special topic as a WAL
}
defer saveprogress(lastgoodoffset)
client, err := sarama.NewClient("clientId", brokers, sarama.NewClientConfig())
if err != nil {
log.Error(err)
return
}
defer client.Close()
sarama.NewConsumerConfig()
consumerConfig.OffsetMethod = sarama.OffsetMethodManual
consumerConfig.OffsetValue = int64(lastgoodoff)
consumer, err := sarama.NewConsumer(client, topic, partition, "consumerId", consumerConfig)
if err != nil {
log.Error(err)
return
}
defer consumer.Close()
for {
select {
case event := <-consumer.Events():
if event.Err != nil {
log.Error(event.Err)
return
}
msgContent := &Message{}
err = json.Unmarshal(message.Value, msgContent)
if err != nil {
log.Error(err)
continue //continue to skip this message or return to stop without updating the offset.
}
// Send the message on to be processed.
out <- msgContent
lastgoodoff = event.Offset
}
}
}()
}
func startkafkafkareader(wg*sync.WaitGroup,lastgoodoff int64,out chanjson.Unmarshal可能会导致错误,如果您不想引发恐慌,请不要:)Ha。谢谢你知道我该怎么做吗?