go版本kafka的坑
2022-12-13 本文已影响0人
潘雪雯
sarama.StringEncoder 和sarama.ByteEncoder的区别
在推送kafka的sarama.ProducerMessage中,
m := &sarama.ProducerMessage{
Topic: topic,
Value: sarama.StringEncoder(buf),
}
在Value选择编码方式时,如果选择ByteEncoder, 在后面的批量发送kafka k.producer.SendMessages(msgs) 的时候,会出现问题,问题就是发到kafka的数据每条数据都是一样的。但是用单次发送k.producer.SendMessage(msg)是没问题的。
但是问题是单次发送的效率太低了,最好使用批量发送的方式。这个时候就要选择sarama.StringEncoder方式,不然太坑了,这个问题让我查了一天, 一直以为是go的append改变了发送数据的格式呢
https://github.com/Shopify/sarama/issues/1625
感悟:
遇到这种问题,真得找到地方去查,比如我现在用到kafka的问题,就应该去github库对应的issue中查