提问者:小点点

Kafka代理超时异常性能问题


我们有下面的Kafka设置

Partition - 10
Replication - 3
fetch.max.byte at broker - 32MB

Producer
max.block.ms =- 5min
request.timeout.mm - 5min
retries - 4

Consumer
No custom config

Message size - 1kb

使用此设置,我们面临以下问题:

> < li>

当producer加载大量消息时,有时producer会抛出一个异常,指出批处理已过期,因为逗留时间已过。我知道,当生产者的速度超过消费者的速度时,就会出现这种异常,但是我是否可以设置任何配置来防止这种异常,并等到消费者能够消费。因为这是一个流数据,应用程序不能丢失任何消息,而且顺序也很重要。

我看到的另一个问题是,当生产者发布10-15条消息时,这些消息会在大约6秒后到达消费者手中。并且如果消息数量很大,该延迟会持续增加。我检查了代理日志,发现一旦它到达代理,消费者就可以消费它。但它会在5-6秒后到达代理。这里的负载不多,仍然需要6秒钟。我应该如何提高性能。我的应用程序从上游接收数据并发布到kafka topic 1。从这个kafka topic1,另一个应用程序基于一个键消费和聚合数据,并发布到另一个kafka topic 2

主题1是主题2的生产者,因此根据我们的分析,主题发布是好的,但是主题1的消费有延迟。我们认为是因为经纪人。


共1个答案

匿名用户

如果您看到超过< code>linger.ms时间的异常,这意味着该批消息在发送缓冲区中的时间超过了< code>linger.ms。您可以将< code>linger.ms设置为零,让生成器立即向代理发送消息。

根据你的描述,延迟发生在生产方。除了将< code>linger.ms设置为零之外,调整以下设置可能有助于减少生成延迟:

acks= 1   # Leader will write the record to its local log but will
          # respond without awaiting full acknowledgement from all followers.

batch.size # reduce the batch size so that the producer do not wait for 
           # a larger batch size

delivery.timeout.ms # this is available since Kafka 2.1, and allows you 
                    # specify clearly on delivery timeout

max.in.flight.requests.per.connection # increase # of inflight request can 
                                      # help to improve throughput