【问题标题】:Kafka new producer timeoutKafka 新生产者超时
【发布时间】:2018-09-11 21:41:31
【问题描述】:

我正在使用新的 kafka 生产者客户端并将 timeout.ms 属性设置为 50 毫秒。

这里是生产者使用的完整配置:

props.put("acks", "1");
props.put("buffer.memory", "33554432");
props.put("retries", "1");
props.put("batch.size", "16384");
props.put("client.id", "foo");
props.put("linger.ms", "0");
props.put("timeout.ms", "50");

在某些高负载时刻的请求平均响应时间为 4 秒,但我没有收到任何超时错误。

有人知道这个超时是如何计算的,什么时候开始计算,什么时候结束?有没有办法配置超时从调用生产者的发送方法的那一刻开始?

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    新的timeout.ms 属性适用于生产者的ack 配置。例如考虑以下情况

    ack = all
    timeout.ms = 3000
    

    在这种情况下,ack = all 表示领导者在收到完整同步副本 (ISR) 的确认之前不会响应,并且获得此确认的最大等待时间将是 3000 ms。如果在给定时间内没有收到预期数量的确认,它将返回错误。

    另请注意,此属性不考虑网络延迟。

    来自文档页面:

    该配置控制服务器等待跟随者确认的最长时间,以满足生产者使用 acks 配置指定的确认要求。如果超时后未达到请求的确认次数,将返回错误。此超时是在服务器端测量的,不包括请求的网络延迟。

    因此,如果领导者无法响应(在将记录写入自己的日志而无需等待来自所有关注者)在 50 毫秒内应该会抛出一个错误。

    【讨论】:

    • 这个配置在新的kafka生产者上不存在,它说当我启动生产者时它会被忽略。
    • 同意,新的生产者配置使用这个而不是旧的属性,相应地更新了答案
    • 你是对的,这是预期的行为,但我们的问题有点不同。我们正在超载 kafka 并且一些节点停止响应(可能是因为 GC),但是生产者在客户端没有超时,所以它等到节点返回发送排队的消息。在 kafka jira (issues.apache.org/jira/browse/KAFKA-1788) 上有一个问题。
    • 在 Kafka 0.10.2.0 中 timeout.ms 已弃用,并引入了新的 request.timeout.ms
    • 我有类似的问题,但 request.timeout.ms 属性对我没有帮助。
    【解决方案2】:

    在新的 Kafka 2.0 Producer API 中,您可以使用以下属性之一: https://kafka.apache.org/documentation/#producerconfigs

    查看https://kafka.apache.org/20/javadoc/index.html?org/apache/kafka/clients/producer/KafkaProducer.html上的使用示例

    超时现在由max.block.ms 属性定义。

    【讨论】:

    • 你好@Guigoz,我有一个疑问。我的疑问是:一旦达到max.block.ms,例如 10000 毫秒,我可以肯定地说生产者将停止尝试发送到主题吗?谢谢。
    • 嗨@jumping_monkey,对不起,我自 2018 年以来就没有积极使用过 Kafka,所以我不能肯定地说,但文档说:“阻止时间的阈值由 max.block 确定。 ms 之后它会引发 TimeoutException。”如果抛出异常,你的 kafka 生产者将抛出这个 TimeoutException。然后,您将能够抓住它并做任何您必须做的事情(例如重试或失败/记录)。希望它能回答你的问题:)
    • 您好@Guigoz,非常感谢您回来。是的,我将其视为杀死请求(阻塞线程)100%。希望我(我们)是对的。只是好奇,你为什么停止积极使用 Kafka?有更好的选择吗?干杯伙伴。
    • 嗨@jumping_monkey。我只是在做其他不使用 Kafka 的项目。在最近的项目中,当我们没有高性能需求时,我们更喜欢使用 rabbitmq 进行消息传递。我们发现它更易于使用和稳定
    猜你喜欢
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 2016-12-12
    相关资源
    最近更新 更多