为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MMTTMM 2021-12-10 12:23:19
从Kafka的API文档中我找到了对Apache Kafka中send()方法的描述(producer的api文档):“发送是异步的,一旦记录存储在等待发送的记录缓冲区中,此方法将立即返回。这允许并行发送许多记录而不会阻塞等待每个记录后的响应。”我只是想知道记录是如何并行发送的?如果我有 3 个代理,并且每个代理在同一主题下有 3 个分区,那么 Kafka 生产者是否会将记录并行发送到 9 个分区?或者生产者只是同时将记录发送给 3 个经纪人?生产者如何并行工作?
查看完整描述

2 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

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 个唯一的分区,如果你的意思是复制分区,你只发送给领导者 - 然后复制将处理传播)。


查看完整回答
反对 回复 2021-12-10
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

是的,Producer 会将发往每个分区领导者的消息进行批量处理,并将并行发送。来自API 文档

send() 方法是异步的。调用时,它将记录添加到待发送记录的缓冲区中并立即返回。这允许生产者将单个记录批处理在一起以提高效率。

生产者为每个分区维护未发送记录的缓冲区。这些缓冲区的大小由 batch.size 配置指定。将其设置得更大可能会导致更多的批处理,但需要更多的内存(因为我们通常会为每个活动分区使用这些缓冲区之一)。

这是一个帮助图:

//img1.sycdn.imooc.com//61b2d65e0001813319140889.jpg

查看完整回答
反对 回复 2021-12-10
  • 2 回答
  • 0 关注
  • 376 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信