2017-01-16 79 views
1

我試圖配置我的卡夫卡生產者,並通過文件我試圖瞭解不同值之間的最佳關聯。卡夫卡max.request.size與buffer.memory與send.buffer.bytes

據我所知,這些值必須遵循以下規則: max.request.size> = buffer.memory> = send.buffer.bytes。設定這些規則之外的值是沒有意義的。我對麼?什麼是設置這些值的最佳指導原則(假設max.request.size = X)?

此外,假設ack = 1,max.in.flight.requests.per.connection是否有任何意義?

謝謝!

回答

1

這三者並不相關。事實上,它們的默認值是:

max.request.size:1048576

buffer.memory:33554432

send.buffer.bytes:131072

因此「 max.request.size> = buffer.memory> = send.buffer.bytes「不成立,因爲它們涉及不同的事情。

至於max.in.flight.requests.per.connection,它控制生產者是否應該履行郵件的發送順序,這也與ACK的無關聯。

+0

我錯過了一些東西: 如果生產者在每封郵件後等待確認,我們如何失去訂單? (我在第一次發出郵件之前不發送其他郵件) 至於大小問題,我理解爲什麼send.buffer更小,但爲什麼我會保存比請求大小更大的緩衝區?此外,不是max.request.size和batch.size冗餘? (爲什麼我會舉行一個較大批量大小,如果我不能在一個請求發送?如果batch.size較小,這意味着該請求將被batch.size反正發送??爲什麼配置一個大的請求) – sternr

+0

如果兩個批次發送到同一個分區,並且第一個由於某種原因而失敗並且是重試(假設您啓用重試),但第二個批次成功,則第一批中的消息可能會晚到無序發生的地方。 – amethystic

+1

生產者使用一個緩衝區,在其中積累消息。稍後,單獨的IO線程將從緩衝區中獲取消息並將其包裝到PRODUCE請求中,因此您肯定希望此緩衝區相當大。在這樣做的時候,IO線程總是可以做些事情而不是等待。 – amethystic