我是Golang和Kafka的新手,并且我正在使用segmentio kafka-go使用Golang连接到Kafka服务器。到目前为止,我想推送Kafka中用户的每个事件,所以我想推送单个消息(而不是批量),但是由于此库提供的写操作对批量消息或单个消息花费相同的时间,因此很多时间。有什么办法可以快速编写单个消息,以便我可以在更短的时间内推送卡夫卡中的数百万个事件?
我已经针对单个消息和批处理消息进行了测试,这花费了相同的时间(最小为10毫秒)。
我认为您的问题只是WriterConfig。
例如,如果您的配置类似于segmentio / kafka-go docs上的示例:
w := kafka.NewWriter(kafka.WriterConfig{
Brokers: []string{"localhost:9092"},
Topic: "topic-A",
Balancer: &kafka.LeastBytes{},
})
您可以尝试设置批次大小和批次超时:
w := kafka.NewWriter(kafka.WriterConfig{
Brokers: []string{"localhost:9092"},
Topic: "topic-A",
Balancer: &kafka.LeastBytes{},
BatchSize: 1,
BatchTimeout: 10 * time.Millisecond,
})
发生这种情况是因为kafka-go默认情况下等待1秒钟,直到批处理达到最大大小为止(默认情况下为100条消息),正如我们在代码中看到的那样。
希望对您有帮助。
更新:请注意,一一发送消息会减慢该过程。例如:批量发送100条消息在我的计算机上花费了0.0107s。一次发送相同的100条消息花费了0.0244s。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句