【问题标题】:Kafka broker performance issue with timeoutexception超时异常的 Kafka 代理性能问题
【发布时间】:2019-07-10 11:41:29
【问题描述】:

我们有以下 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. 当生产者放入大量消息时,有时生产者会抛出一个异常,说 Batch Expired 因为延迟时间已经过去。我知道当生产者的投放速度快于消费者的消费速度时会出现此异常,但是我是否可以设置任何配置来防止此异常并等到消费者能够消费。由于这是一个流数据,应用程序不会丢失任何消息,而且顺序也很重要。

  2. 我看到的另一个问题是当生产者发布甚至 10-15 条消息时,该消息在大约 6 秒后到达消费者。如果消息数量很大,这种延迟会不断增加。我检查了代理日志并观察到,一旦它到达代理,消费者就可以使用它。但它会在 5-6 秒后到达经纪人。这里的负载并不多,仍然需要 6 秒。 我应该如何提高性能。 我的应用程序从上游接收数据并发布到 kafka 主题 1。 从这个 kafka 主题 1 中,另一个应用程序根据密钥消费和聚合数据,然后发布到另一个 kafka 主题 2

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

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    如果您看到超出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
    

    【讨论】:

    • 生产者发送速度较快时会出现此异常,如果我们将逗留时间设置为0,它立即发送消息而不等待,不会进一步加剧问题,因为现在生产者发送它的速度会更快.同样关于最大飞行请求,我们的吞吐量似乎很好,我们的问题是延迟
    • 你检查过你的程序是否有频繁的长时间gc停顿吗?任何网络连接问题?
    • 没有网络问题,我如何检查 gc 暂停任何特定日志以检查?我的应用程序使用 5gb 内存运行,即使有少量消息 (5-10) 我也看到了这个问题
    • 你能提供更多关于你的应用程序做什么的上下文吗?如果您使用-verbosegc -Xloggc:$log_file_path 启用 gc 日志记录,您可以检查 gc 日志以查看 gc 是否有长时间暂停。
    • 更新了问题以获取更多详细信息。您也可以告诉我们将逗留时间设置为 0 是否会使问题恶化或解决它
    猜你喜欢
    • 1970-01-01
    • 2019-07-13
    • 2016-02-16
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 2019-07-06
    相关资源
    最近更新 更多