2017-01-16 175 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