卡夫卡经纪人的性能问题与timeoutexception

时间:2019-02-16 15:03:40

标签: apache-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

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

  1. 当生产者放置大量消息时,有时生产者会抛出一个异常,说“批处理过期”是因为时间已过去。我知道,当生产者放置的速度快于消费者可以消费的速度时,就会出现此异常,但是我可以设置任何配置来阻止此异常,并等到消费者可以消费时。由于这是流数据,因此应用程序不会丢失任何消息,而且顺序很重要。

  2. 我看到的另一个问题是,当Producer甚至发布10-15条消息时,该消息在6秒钟左右到达消费者。如果邮件数量很大,则此延迟会不断增加。我检查了代理日志,并观察到一旦到达代理,消费者便可以使用它。但是在5-6秒后到达经纪人。这里的负载并不多,仍然需要6秒钟。 我应该如何改善性能。 我的应用从上游接收数据并发布到kafka主题1。 从这个kafka主题1,另一个应用程序根据密钥使用并汇总数据,然后发布到另一个kafka主题2

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

1 个答案:

答案 0 :(得分:0)

如果您看到超过linger.ms时间的异常,则表示这批消息在发送缓冲区中的时间超过linger.ms。您可以将linger.ms设置为零,以使生产者立即将消息发送给代理。

根据您的描述,延迟发生在生产方。除了将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