亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我們如何在kafka中快速寫入單個消息(而不是批量)?

我們如何在kafka中快速寫入單個消息(而不是批量)?

Go
慕田峪4524236 2023-07-17 16:58:09
我是 Golang 和 Kafka 的新手,我正在使用 Segmentio kafka-go 使用 Golang 連接到 Kafka 服務器。截至目前,我想推送 Kafka 中用戶的每個事件,所以我想推送單個消息(而不是批量),但由于該庫提供的寫入操作對于批量或單個消息需要相同的時間,因此需要很多時間。有沒有什么方法可以快速編寫單條消息,以便我可以在更短的時間內推送卡夫卡中的數百萬個事件?我已經對單條消息和批量消息進行了測試,它花費相同的時間(最短為 10 毫秒)。
查看完整描述

2 回答

?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

我認為你的問題只是 WriterConfig。


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


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.0244 秒。


查看完整回答
反對 回復 2023-07-17
?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

我對golang了解不多。但以下使用Writer.WriteMessages 的函數具有同步發送選項。

寫入速度快(使用同步發送)實際上取決于您的網絡往返時間,即將消息發送到 Kafka 所需的時間加上從 Kafka 獲取確認所需的時間。

如果您使用同步發送,那么您的發送將被阻塞,直到收到確認為止。因此,為了加快速度,一種方法是減少確認。最好將其設置為 1(這意味著領導者已將消息寫入其日志,但不會復制到追隨者)。但如果領導者宕機并且消息沒有被復制,這可能會導致損失。

因此,您可以將其設置為acks=all并更改min.insync.replicas=2主題。值越小,send()返回的速度就越快,并且將下一條消息推送到 Kafka 的速度也就越快。


查看完整回答
反對 回復 2023-07-17
  • 2 回答
  • 0 關注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號