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

Rob*_*old 2 apache-kafka apache-kafka-streams

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

Mat*_*Sax 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.建议producer.在Streams中为生产者配置添加前缀以隔离生产者/消费者配置.您可以使用StreamsConfig.producerPrefix(ProducerConfig.LINGER_MS_CONFIG)参数名称以获得最大的便利:)

  • 是的,取决于您的拓扑结构.例如,如果您在启用缓存时使用KTable(默认情况下),则提交间隔可能会产生影响. (2认同)