我们有以下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
使用此设置,我们面临以下问题:
当生产者放置大量消息时,有时生产者会抛出一个异常,说“批处理过期”是因为时间已过去。我知道,当生产者放置的速度快于消费者可以消费的速度时,就会出现此异常,但是我可以设置任何配置来阻止此异常,并等到消费者可以消费时。由于这是流数据,因此应用程序不会丢失任何消息,而且顺序很重要。
我看到的另一个问题是,当Producer甚至发布10-15条消息时,该消息在6秒钟左右到达消费者。如果邮件数量很大,则此延迟会不断增加。我检查了代理日志,并观察到一旦到达代理,消费者便可以使用它。但是在5-6秒后到达经纪人。这里的负载并不多,仍然需要6秒钟。 我应该如何改善性能。 我的应用从上游接收数据并发布到kafka主题1。 从这个kafka主题1,另一个应用程序根据密钥使用并汇总数据,然后发布到另一个kafka主题2
主题1是主题2的生产者,因此根据我们的分析,主题发布很好,但主题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