首页 > 解决方案 > 当生产者数量多于分区时,Kafka 默认分区器行为

问题描述

kafka 常见问题页面

在 Kafka 生产者中,可以指定一个分区键来指示消息的目标分区。默认情况下,使用基于散列的分区器来确定给定键的分区 id

因此,具有特定键的所有消息将始终转到主题中的同一分区:

  1. 消费者如何知道生产者写入哪个分区,从而可以直接从该分区消费?
  2. 如果生产者多于分区,并且多个生产者正在写入同一个分区,那么偏移量是如何排序的,以便消费者可以消费来自特定生产者的消息?

标签: apache-kafkakafka-partition

解决方案


消费者如何知道生产者写入哪个分区

不需要,或者至少不应该,因为这会在客户端之间产生紧密的耦合。所有消费者实例都应负责处理订阅主题的所有消息。虽然您可以assign将消费者添加到 TopicPartition 实例列表,并且您可以为给定键调用 DefaultPartitioner 的方法以找出它会进入哪个分区,但我个人并没有遇到这种需求。另外,请记住,生产者可以完全控制partitioner.class设置,并且不需要通知消费者此设置。

如果生产者多于分区,并且多个生产者正在写入同一个分区,那么偏移量是如何排序的......

生产者或分区的数量无关紧要。批次按顺序写入分区。您可以使用 限制每个 Producer 客户端一次发送的批次数量(并且每个应用程序只需要一个实例)max.in.flight.requests,但是对于单独的应用程序,您当然无法控制任何排序

以便消费者可以消费来自特定生产者的消息?

同样,不应该这样做。


推荐阅读