如何最大限度地减少Kafka Streams应用程序的延迟?

时间:2017-07-05 21:50:24

标签: apache-kafka apache-kafka-streams

我的Kafka Streams应用程序通常需要大约100毫秒的时间,从发送消息到结果是在不同的主题上发送响应消息的时间。我可以使用哪些配置选项或最佳实践来最小化延迟?

1 个答案:

答案 0 :(得分:5)

这似乎与生产者配置linger.ms有关。

从(http://kafka.apache.org/documentation/#producerconfigs

  

生产者将请求传输之间到达的任何记录组合到一个批处理请求中。通常情况下,只有在记录到达的速度超过发送速度时才会在负载下发生。但是,在某些情况下,即使在中等负载下,客户端也可能希望减少请求数量。此设置通过添加少量人工延迟来实现此目的,即,不是立即发送记录,生产者将等待达到给定的延迟以允许发送其他记录,以便可以将发送一起批处理。这可以被认为类似于TCP中的Nagle算法。此设置给出了批处理延迟的上限:一旦我们获得了分区记录的batch.size值,它将立即发送,无论此设置如何,但是如果我们为此分区累积的字节数少于这个字节,我们将'在指定时间内“等待”等待更多记录显示。此设置默认为0(即无延迟)。例如,设置linger.ms = 5可以减少发送的请求数量,但会减少5毫秒的延迟,以减少加载时发送的记录。

Kafka Streams将此值设置为100毫秒(普通生产者默认值为0毫秒)以提高吞吐量。

您可以通过StreamsConfig参数producer.linger.ms减少该值。建议在Streams中使用producer.作为生产者配置的前缀,以隔离生产者/消费者配置。您可以使用StreamsConfig.producerPrefix(ProducerConfig.LINGER_MS_CONFIG)作为参数名称以获得最大的便利:)