Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 在发送请求之前,Kafka Producer是否始终等待linger.ms指定的值?_Apache Kafka_Spring Kafka_Kafka Producer Api - Fatal编程技术网

Apache kafka 在发送请求之前,Kafka Producer是否始终等待linger.ms指定的值?

Apache kafka 在发送请求之前,Kafka Producer是否始终等待linger.ms指定的值?,apache-kafka,spring-kafka,kafka-producer-api,Apache Kafka,Spring Kafka,Kafka Producer Api,根据ProducerConfig java类中的LINGER_MS_文档: “制作人将介于两者之间的所有记录组合在一起 请求传输到单个批处理请求中。通常 仅当记录到达速度超过其可能到达的速度时,才会在加载时发生 发出。但是在某些情况下,客户可能希望减少 即使在中等负载下的请求数。此设置 通过添加少量的人为延迟来实现这一点 是,而不是立即发送一张唱片,制作人将 最多等待给定的延迟,以允许发送其他记录 发送可以批处理在一起。这可以被认为是 与TCP中的Nagle算法类似。此设置提供了上限 绑定在批处

根据ProducerConfig java类中的LINGER_MS_文档:

“制作人将介于两者之间的所有记录组合在一起 请求传输到单个批处理请求中。通常 仅当记录到达速度超过其可能到达的速度时,才会在加载时发生 发出。但是在某些情况下,客户可能希望减少 即使在中等负载下的请求数。此设置 通过添加少量的人为延迟来实现这一点 是,而不是立即发送一张唱片,制作人将 最多等待给定的延迟,以允许发送其他记录 发送可以批处理在一起。这可以被认为是 与TCP中的Nagle算法类似。此设置提供了上限 绑定在批处理延迟上:一旦我们得到“批处理大小配置”值 分区的记录数将立即发送,无论 但是,如果我们的字节数少于这么多,则使用此设置 对于此分区,我们将“逗留”指定的时间 正在等待更多记录显示。此设置默认为0(即。 例如,设置“LINGER\u MS\u CONFIG=5”将具有 减少发送的请求数的效果,但加起来会达到5毫秒 在没有加载的情况下发送记录的延迟。”

我搜索了linger.ms的建议值,但没有找到更高的建议值。对于linger.ms,提到的大多数位置都是5ms

为了进行测试,我将“batch.size”设置为16384(16KB) 和“linger.ms”到60000(60秒) 根据doc,我觉得如果我发送的消息大小大于16384字节,那么制作人不会等待并立即发送消息,但我没有观察到相同的行为

我正在发送大小大于16384字节的事件,但它仍等待60秒。我是否不明白“批量大小”的目的?我对“batch.size”和“linger.ms”的理解是,无论哪个先满足,都会发送消息/批

在这种情况下,如果它是最短的等待时间,并且不优先选择“batch.size”,那么我猜为linger.ms设置一个高值是不对的

以下是yaml中使用的卡夫卡属性:

  producer:
    properties:
      acks: all
      retries: 5
      batch:
        size: 16384
      linger:
        ms: 10
      max:
        request:
          size: 1046528

您是否应用了可能会减小消息大小的压缩?未应用压缩。是否无法共享最小的可复制示例?我已添加了用于kafka producer的YAML配置。到目前为止,我观察到,生产者的等待时间从不超过linger.ms,如果总消息大小小于batch.size,并且经过的时间也小于linger.ms,则生产者从不发送请求。基本问题是,如果达到batch.size,但运行时间小于linger.ms,Kafka producer是否可以发送请求?