我们如何在kafka中快速写入单个消息(而不是批量)?

0 go apache-kafka segment-io kafka-producer-api

我是 Golang 和 Kafka 的新手,我正在使用 Segmentio kafka-go 使用 Golang 连接到 Kafka 服务器。截至目前,我想推送 Kafka 中用户的每个事件,所以我想推送单个消息(而不是批量),但由于该库提供的写入操作对于批量或单个消息需要相同的时间,因此需要很多时间。有没有什么方法可以快速编写单条消息,以便我可以在更短的时间内推送卡夫卡中的数百万个事件?

我已经对单条消息和批量消息进行了测试,它花费相同的时间(最短为 10 毫秒)。

小智 7

我认为你的问题只是 WriterConfig。

例如,如果您的配置类似于segmentio/kafka-go 文档上的示例:

w := kafka.NewWriter(kafka.WriterConfig{
    Brokers:      []string{"localhost:9092"},
    Topic:        "topic-A",
    Balancer:     &kafka.LeastBytes{},
})
Run Code Online (Sandbox Code Playgroud)

您可以尝试设置批量大小和批量超时:

w := kafka.NewWriter(kafka.WriterConfig{
    Brokers:      []string{"localhost:9092"},
    Topic:        "topic-A",
    Balancer:     &kafka.LeastBytes{},
    BatchSize:    1,
    BatchTimeout: 10 * time.Millisecond,
})
Run Code Online (Sandbox Code Playgroud)

发生这种情况是因为 kafka-go 默认等待 1 秒,直到批次达到最大大小(默认为 100 条消息),正如我们在代码中看到

希望对您有帮助。


更新:请注意,一条一条地发送消息会减慢该过程。例如:批量发送100条消息在我的电脑上花费了0.0107s。一条一条发送相同的 100 条消息花费了 0.0244 秒。