4.4. 优化消费者吞吐量和延迟
控制客户端应用程序调用 KafkaConsumer.poll ()
时返回的消息数量。
使用 fetch.max.wait.ms
和 fetch.min.bytes
属性来增加由 Kafka 代理使用者获取的最小数据量。基于时间的批处理使用 fetch.max.wait.ms
进行配置,并且基于大小的批处理则使用 fetch.min.bytes
来配置。
如果消费者或代理中的 CPU 使用率很高,这可能是因为消费者有太多请求。您可以调整 fetch.max.wait.ms
和 fetch.min.bytes
属性,以便在较大的批处理中交付较少的请求和信息。通过调整更高,吞吐量会降低延迟。如果生成的数据量较低,您也可以调整更高的数据。
例如,如果您将 fetch.max.wait.ms
设置为 500ms,并且 fetch.min.bytes
设为 16384 字节,当 Kafka 从消费者收到获取请求时,它将在达到第一个阈值时响应。
相反,您可以调整 fetch.max.wait.ms
和 fetch.min.bytes
属性,以提高端到端延迟。
... ...
# ...
fetch.max.wait.ms=500
fetch.min.bytes=16384
# ...
通过增加获取请求大小来降低延迟
使用 fetch.max.bytes
和 max.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
NUMBER-OF-BROKERS * fetch.max.bytes and NUMBER-OF-PARTITIONS * max.partition.fetch.bytes
如果内存用量可以容纳它,您可以增加这两个属性的值。通过允许每个请求中的更多数据,随着获取请求减少,延迟会得到提高。
... ...
# ...
fetch.max.bytes=52428800
max.partition.fetch.bytes=1048576
# ...