Kafka producer批量发送消息相关机制技术问询
Kafka Producer 批次相关问题解答
- 问题1:producer是否知晓每个批次所属的partition?
是,producer完全清楚每个批次对应的partition。消息进入producer之后,首先会通过分区器逻辑计算出该消息要发往的目标partition,之后才会追加到对应partition的内存批次缓存中,每个批次从创建开始就绑定了唯一的partition归属,producer会维护所有待发送批次的partition映射关系。 - 问题2:producer是否知晓每个partition对应的broker地址?
是。producer启动后会主动拉取Kafka集群的元数据,元数据中包含了所有topic的分区分配信息、每个partition的leader副本所在的broker地址,以及集群所有broker的访问地址。producer还会定期刷新元数据,保证能感知到分区leader切换、broker上下线等集群变更。 - 问题3:producer发送请求时,单个请求是包含多个批次,还是仅包含归属于目标partition的单个批次?
单个请求可以包含多个批次。producer会按「目标broker」维度聚合待发送批次:所有发往同一个broker的partition对应的批次,只要不超过max.request.size配置的单个请求最大大小限制,就会被打包进同一个Produce请求中发送,以此减少网络IO次数,提升发送效率。 - 问题4:如果producer一次发送多个批次,接收请求的Kafka server是否会将批次转发至对应的目标partition?
不会出现转发行为。因为producer聚合批次的规则就是把同一个broker作为leader的所有partition的批次打包到同一个请求,所以接收该请求的broker本身就是请求内所有批次对应partition的leader节点,broker收到请求后直接把各批次写入对应partition的本地日志即可,不需要跨broker转发,这也是Kafka高性能设计的要点之一。
内容的提问来源于stack exchange,提问作者haoyu wang
相关产品推荐
相关产品推荐

