从kafka的api文档中,我找到了apache kafka(producer的api文档)中send()方法的描述:
“发送是异步的,一旦记录存储在等待发送的记录缓冲区中,此方法将立即返回。这允许并行发送多个记录,而无需阻塞以等待每个记录之后的响应。”
我只是想知道这些记录是如何并行发送的?如果我有3个代理,并且在同一主题下的每个代理上有3个分区,那么kafka producer会并行地将记录发送到9个分区吗?或者制作人只是同时把唱片发给3个经纪人?制片人是如何并行工作的?
从kafka的api文档中,我找到了apache kafka(producer的api文档)中send()方法的描述:
“发送是异步的,一旦记录存储在等待发送的记录缓冲区中,此方法将立即返回。这允许并行发送多个记录,而无需阻塞以等待每个记录之后的响应。”
我只是想知道这些记录是如何并行发送的?如果我有3个代理,并且在同一主题下的每个代理上有3个分区,那么kafka producer会并行地将记录发送到9个分区吗?或者制作人只是同时把唱片发给3个经纪人?制片人是如何并行工作的?
2条答案
按热度按时间ogq8wdun1#
Kafka客户端使用
org.apache.kafka.common.requests.ProduceRequest
可以同时为多个分区承载有效负载(请参见http://kafka.apache.org/protocol.html#the_messages_produce).因此它发送(使用
org.apache.kafka.clients.NetworkClient
)同时向(三)名经纪人提出三项请求,即:您可以控制使用producer配置完成的批处理量。
(请注意,我用9个唯一分区回答了这个问题,如果您的意思是复制分区,则只发送给leader—然后复制将处理传播)。
0sgqnhkj2#
是的,生产者将成批发送给每个分区前导的消息,并将并行发送。从api文档:
send()方法是异步的。调用时,它将记录添加到挂起记录发送的缓冲区中,并立即返回。这允许制作者将单个记录批处理在一起以提高效率。
和
生产者为每个分区维护未发送记录的缓冲区。这些缓冲区的大小由batch.size配置指定。将其变大会导致更多的批处理,但需要更多的内存(因为每个活动分区通常都有一个缓冲区)。
下面是一个图表: