Apache kafka Kafka max.request.size vs.buffer.memory vs.send.buffer.bytes

Apache kafka Kafka max.request.size vs.buffer.memory vs.send.buffer.bytes,apache-kafka,kafka-producer-api,Apache Kafka,Kafka Producer Api,我正试图配置我的卡夫卡制作人,并浏览文档,试图了解不同值之间的最佳相关性 据我所知,这些价值观必须遵守以下规则: max.request.size>=buffer.memory>=send.buffer.bytes。在这些规则之外设置值是没有意义的。我说得对吗?设置这些值的最佳指导原则是什么(假设max.request.size=X) 另外,假设ack=1,max.in.flight.requests.per.connection是否有任何意义 谢谢 这三者并不相关。事实上,它们的默认值是: 最

我正试图配置我的卡夫卡制作人,并浏览文档,试图了解不同值之间的最佳相关性

据我所知,这些价值观必须遵守以下规则: max.request.size>=buffer.memory>=send.buffer.bytes。在这些规则之外设置值是没有意义的。我说得对吗?设置这些值的最佳指导原则是什么(假设max.request.size=X)

另外,假设ack=1,max.in.flight.requests.per.connection是否有任何意义


谢谢

这三者并不相关。事实上,它们的默认值是:

最大请求尺寸:1048576

buffer.memory:33554432

send.buffer.bytes:131072

所以“max.request.size>=buffer.memory>=send.buffer.bytes”不成立,因为它们涉及不同的事情


至于max.in.flight.requests.per.connection,它控制制作者是否应该遵守消息的发送顺序,这也与ack无关。

我遗漏了一点:如果制作者在每条消息之后等待ack,我们怎么会失去顺序?(在确认第一条消息之前,我不会再发送另一条消息)至于大小问题,我理解为什么send.buffer更小,但为什么我会持有比请求大小更大的缓冲区?此外,max.request.size和batch.size不是多余的吗?(如果不能在一个请求中发送,为什么要保留较大的批处理大小?如果batch.size较小,则为什么要配置较大的请求,这意味着请求仍将通过batch.size发送???)如果两个批处理发送到同一分区,第一个批处理由于某种原因失败,并且正在重试(假设启用重试),但第二个成功,然后,第一批中的消息可能稍后到达发生无序的位置。生产者使用一个缓冲区,将消息累积到其中。稍后,一个单独的IO线程将从缓冲区获取消息,并将它们包装到一个生成请求中,因此您肯定希望这个缓冲区相当大。在这样做的过程中,IO线程可以总是有事情要做,而不是等待。至于最后一个问题,生产请求包含多个批次。调整这两个参数有助于提高吞吐量。