4.4. 优化消费者进行吞吐量和延迟

控制客户端应用程序调用 KafkaConsumer.poll () 时返回的消息数量。

使用 fetch.max.wait.msfetch.min.bytes 属性来增加由 Kafka 代理使用者获取的最小数据量。基于时间的批处理是使用 fetch.max.wait.ms 进行配置的,基于大小的批处理则使用 fetch.min.bytes 进行配置。

如果消费者或代理中的 CPU 使用率很高,这可能是因为来自消费者的请求太多。您可以调整 fetch.max.wait.msfetch.min.bytes 属性,以便请求数量较少,消息就会在较大的批处理中交付。通过调整更高的吞吐量,以一定的延迟成本提高吞吐量。如果生成的数据量较低,您也可以调整更高的值。

例如,如果您将 fetch.max.wait.ms 设置为 500ms,并将 fetch.min.bytes 设置为 16384 字节,当 Kafka 收到从消费者获取请求时,它将在达到其中一个阈值时响应。

相反,您可以调整 fetch.max.wait.msfetch.min.bytes 属性,以改进端到端延迟。

# ...
fetch.max.wait.ms=500 1
fetch.min.bytes=16384 2
# ...
1
代理在完成获取请求前将等待的最长时间(毫秒)。默认值为 500 毫秒。
2
如果使用最小批处理大小(以字节为单位),或者在达到最小值时发送请求,或者消息已排队的时间超过 fetch.max.wait.ms (每个请求)。添加延迟可让批处理将消息累计到批处理大小。

通过增加获取请求大小来降低延迟

使用 fetch.max.bytesmax.partition.fetch.bytes 属性来增加 Kafka 代理使用者获取的最大数据量。

fetch.max.bytes 属性一次对从代理获取的数据量设置一个最大限制(以字节为单位)。

max.partition.fetch.bytes 会以字节为单位设置每个分区返回的最大限制,每个分区必须始终大于代理或主题配置中设置的 max.message.bytes 字节数。

客户端可消耗的最大内存量大约为:

NUMBER-OF-BROKERS * fetch.max.bytes and NUMBER-OF-PARTITIONS * max.partition.fetch.bytes

如果内存用量可以容纳它,您可以增加这两个属性的值。通过在每个请求中允许更多数据,当获取请求较少时,会改进延迟。

# ...
fetch.max.bytes=52428800 1
max.partition.fetch.bytes=1048576 2
# ...
1
为获取请求返回的最大数据量(以字节为单位)。
2
每个分区返回的最大数据量(以字节为单位)。