繁体   English   中英

如何设置Kafka Producer的每秒消息速率?

[英]How to set Kafka Producer message rate per second?

我正在读取一个csv文件,并将此输入的行提供给我的Kafka Producer。 现在,我希望我的Kafka Producer以每秒100条消息的速度产生消息。

如果您喜欢流处理,那么akka-streams会很好地支持节流: http ://doc.akka.io/docs/akka/current/java/stream/stream-quickstart.html#time-based-processing

然后,akka-stream-kafka(又名反应性-kafka)库允许您将两者连接在一起: http : //doc.akka.io/docs/akka-stream-kafka/current/home.html

看一下Kafka Producer的linger.msbatch.size属性。 您必须相应地调整这些属性以获得所需的速率。

生产者将在请求传输之间到达的所有记录归为一个批处理的请求。 通常,只有在记录到达的速度快于记录发送的速度时,这种情况才会发生。 但是,在某些情况下,即使在中等负载下,客户端也可能希望减少请求的数量。 此设置通过添加少量的人为延迟来实现此目的-也就是说,与其立即发送记录,生产者将等待直到给定的延迟,才允许发送其他记录,以便可以将发送分批在一起。 可以认为这类似于TCP中的Nagle算法。 此设置给出了批处理延迟的上限:一旦获得分区的记录的batch.size值,无论此设置如何,都会立即发送该记录,但是,如果我们为该分区积累的字节数少于这个数量,我们将“持续指定的时间,以等待更多记录显示。 此设置默认为0(即无延迟)。 例如,设置linger.ms = 5将具有减少发送请求的数量的效果,但在没有负载的情况下,发送记录的延迟将增加5ms。

在Kafka JVM Producer中,吞吐量取决于多个因素。 最常见的是,它以MB /秒而不是Msg /秒为单位。 在您的示例中,如果假设CSV中的每一行大小均为1MB,则您需要调整生产者配置以达到100MB /秒,以便可以实现100 Msg /秒的目标吞吐量。 在调整生产者配置时,必须考虑什么是您的batch.size (以字节为单位)的配置值? 如果将其设置得太低,则生产者将尝试更频繁地发送消息并等待服务器的答复。 这将提高生产者的产量。 但是会影响延迟。 如果您使用的是基于异步回调的生产者,那么在这种情况下,您的总体吞吐量将受到生产者在等待来自max.in.flight.request.per.connection服务器的答复之前可以发送多少消息的max.in.flight.request.per.connection 如果将batch.size得过高,则生产者吞吐量会受到影响,因为在等待linger.ms周期后,kafka生产者会将批次中的所有消息立即发送给该特定分区的代理。 但是具有更大的batch.size意味着更大的buffer.memory可能会对GC造成压力。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM