猿问

Apache Kafka 生产者如何将记录并行发送到分区?

从Kafka的API文档中我找到了对Apache Kafka中send()方法的描述(producer的api文档):

“发送是异步的,一旦记录存储在等待发送的记录缓冲区中,此方法将立即返回。这允许并行发送许多记录而不会阻塞等待每个记录后的响应。”

我只是想知道记录是如何并行发送的?如果我有 3 个代理,并且每个代理在同一主题下有 3 个分区,那么 Kafka 生产者是否会将记录并行发送到 9 个分区?或者生产者只是同时将记录发送给 3 个经纪人?生产者如何并行工作?


MMTTMM
浏览 377回答 2
2回答

慕田峪4524236

Kafka 客户端使用一个org.apache.kafka.common.requests.ProduceRequest可以同时为多个分区携带有效载荷的 (参见http://kafka.apache.org/protocol.html#The_Messages_Produce )。因此,它org.apache.kafka.clients.NetworkClient在三个请求中并行发送(使用)到(三个)代理中的每一个,即:- sends records for topic-partition0, topic-partition1, topic-partition2 to broker 1- sends records for topic-partition3, topic-partition4, topic-partition5 to broker 2- sends records for topic-partition6, topic-partition7, topic-partition8 to broker 3您可以控制使用生产者配置完成的批处理量。(注意我回答了 9 个唯一的分区,如果你的意思是复制分区,你只发送给领导者 - 然后复制将处理传播)。

牧羊人nacy

是的,Producer 会将发往每个分区领导者的消息进行批量处理,并将并行发送。来自API 文档:send() 方法是异步的。调用时,它将记录添加到待发送记录的缓冲区中并立即返回。这允许生产者将单个记录批处理在一起以提高效率。和生产者为每个分区维护未发送记录的缓冲区。这些缓冲区的大小由 batch.size 配置指定。将其设置得更大可能会导致更多的批处理,但需要更多的内存(因为我们通常会为每个活动分区使用这些缓冲区之一)。这是一个帮助图:
随时随地看视频慕课网APP

相关分类

Java
我要回答