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

Apache kafka 如何设置Kafka Producer每秒的消息速率?,apache-kafka,kafka-producer-api,Apache Kafka,Kafka Producer Api,我正在读取一个csv文件,并将此输入的行提供给我的卡夫卡制作人。现在,我希望我的Kafka Producer以每秒100条消息的速度生成消息。如果您喜欢流处理,那么akka streams很好地支持节流: 然后akka stream kafka(也称为反应式kafka)库允许您将两者连接在一起:如果您喜欢流处理,那么akka streams对节流有很好的支持: 然后,akka stream kafka(也称为反应式kafka)库允许您将两者连接在一起:查看kafka Producer的linge

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

如果您喜欢流处理,那么akka streams很好地支持节流:


然后akka stream kafka(也称为反应式kafka)库允许您将两者连接在一起:

如果您喜欢流处理,那么akka streams对节流有很好的支持:


然后,akka stream kafka(也称为反应式kafka)库允许您将两者连接在一起:

查看kafka Producer的
linger.ms
batch.size
属性。 您必须相应地调整这些属性以获得所需的速率

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


看看卡夫卡制作人的
linger.ms
batch.size
属性。 您必须相应地调整这些属性以获得所需的速率

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


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

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