2 回答

TA貢獻(xiàn)1856條經(jīng)驗 獲得超5個贊
我認(rèn)為你的問題只是 WriterConfig。
例如,如果您的配置類似于segmentio/kafka-go 文檔上的示例:
w := kafka.NewWriter(kafka.WriterConfig{
Brokers: []string{"localhost:9092"},
Topic: "topic-A",
Balancer: &kafka.LeastBytes{},
})
您可以嘗試設(shè)置批量大小和批量超時:
w := kafka.NewWriter(kafka.WriterConfig{
Brokers: []string{"localhost:9092"},
Topic: "topic-A",
Balancer: &kafka.LeastBytes{},
BatchSize: 1,
BatchTimeout: 10 * time.Millisecond,
})
發(fā)生這種情況是因為 kafka-go 默認(rèn)等待 1 秒,直到批次達(dá)到最大大?。J(rèn)為 100 條消息),正如我們在代碼中看到的。
希望對您有幫助。
更新:請注意,一條一條地發(fā)送消息會減慢該過程。例如:批量發(fā)送100條消息在我的電腦上花費(fèi)了0.0107s。一條一條發(fā)送相同的 100 條消息花費(fèi)了 0.0244 秒。

TA貢獻(xiàn)1834條經(jīng)驗 獲得超8個贊
我對golang了解不多。但以下使用Writer.WriteMessages 的函數(shù)具有同步發(fā)送選項。
寫入速度快(使用同步發(fā)送)實際上取決于您的網(wǎng)絡(luò)往返時間,即將消息發(fā)送到 Kafka 所需的時間加上從 Kafka 獲取確認(rèn)所需的時間。
如果您使用同步發(fā)送,那么您的發(fā)送將被阻塞,直到收到確認(rèn)為止。因此,為了加快速度,一種方法是減少確認(rèn)。最好將其設(shè)置為 1(這意味著領(lǐng)導(dǎo)者已將消息寫入其日志,但不會復(fù)制到追隨者)。但如果領(lǐng)導(dǎo)者宕機(jī)并且消息沒有被復(fù)制,這可能會導(dǎo)致?lián)p失。
因此,您可以將其設(shè)置為acks=all
并更改min.insync.replicas=2
主題。值越小,send()
返回的速度就越快,并且將下一條消息推送到 Kafka 的速度也就越快。
- 2 回答
- 0 關(guān)注
- 184 瀏覽
添加回答
舉報