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

时间:2017-07-10 15:41:49

标签: apache-kafka kafka-producer-api

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

  

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

答案 2 :(得分:0)

在Kafka JVM Producer中,吞吐量取决于多个因素。最常见的是,它以MB /秒而不是Msg /秒为单位。在您的示例中,如果假设CSV中的每一行大小均为1MB,则您需要调整生产者配置以达到100MB /秒,以便可以实现100 Msg /秒的目标吞吐量。在调整生产者配置时,您必须考虑package main import ( "fmt" "greetings/person" ) // pass User as a pointer instead of value func Change(user *person.User) { user.NameChange() } func main() { user := person.User{"Peter", 30} fmt.Println(user) // returns "Peter" Change(&user) fmt.Println(user) // returns "Peter" - Expected "Alex" } (以字节为单位)的配置值是什么?如果将其设置得太低,则生产者将尝试更频繁地发送消息并等待服务器的答复。这将提高生产者的产量。但是会影响延迟。如果您使用的是基于异步回调的生产者,那么在这种情况下,您的总体吞吐量将受到生产者在等待batch.size确定的服务器回复之前可以发送多少消息的限制。 如果您将max.in.flight.request.per.connection设置得太高,则生产者吞吐量会受到影响,因为在等待batch.size之后,kafka生产者会将所有消息批量发送给该特定分区的代理。但是拥有更大的linger.ms意味着拥有更大的batch.size,这可能会给GC带来压力。