当前位置: 首页 > 知识库问答 >
问题:

具有相同键但来自不同Kafka生产者的消息是否会进入不同的分区?

方博
2023-03-14

我有两个Kafka制作人向具有多个分区的同一主题发送消息。

正如预期的那样,来自同一生产者PR1的具有相同密钥K1的消息总是转到同一分区PA1。

问题是来自另一个生产者PR2的具有相同密钥K1的消息转到另一个分区PA2,而我希望它们也转到PA1。

Kafka不是在制片人之间保留分区分配吗?

是否与两个生产者使用不同的Kafka客户端库有关?

如果我设置两个制作人使用相同的id,会有帮助吗?

共有2个答案

微生俊捷
2023-03-14

感谢大家的评论和回答。

原因是其中一个Kafka库节点rdkafka使用了与Java producer不同的默认分区器,https://github.com/Blizzard/node-rdkafka/issues/616.

分区器配置更改为murmur2_random工作。

岑熙云
2023-03-14

消息分配给分区的方式可以根据partitioner的配置集按生产者进行配置。类传递给生产者API。如果您想编写自己的接口,那么有一个接口。

默认为组织。阿帕奇。Kafka。客户。制作人内部构件。DefaultPartitioner,它使用密钥哈希来确保同一密钥的所有消息最终都在同一分区中。

 类似资料:
  • 我有一个场景,我已经在不同的节点上部署了4个Kafka消费者实例。我的主题有4个分区。现在,我想配置消费者,使他们都从主题的不同分区获取。 我知道一个事实,如果消费者来自同一个消费者组,他们会确保分区被平分。但在我的情况下,他们不在同一组。

  • 我有4个分区和4个消费者(例如A、B、C、D)。如何使用使用者组配置哪个使用者将从哪个分区读取数据。我用的是Kafka的春靴。

  • 我用下面的代码给Kafka写信: 我们使用0.8.1.1版本的Kafka。 当多个线程正在写入时,其中一些线程(具有不同的负载)是否使用相同的分区键进行写入,因此Kafka会覆盖这些消息(由于相同的分区密钥)? 让我们朝这个方向思考的文献是:http://kafka.apache.org/documentation.html#compaction

  • 这是我的消费者: 所以当运行我的制作人时,它最终会出错。任何人都知道这意味着什么,如果这可能是错的。

  • 我有1个消费者群体和5个消费者。也有5个分区,因此每个消费者得到1个分区。 CLI还显示 bin/Kafka-console-consumer . sh-bootstrap-server localhost:9092-Topic Topic-1-from-beginning-partition { n }正确显示每个分区的不同消息。 然而,我经常看到两个或两个以上的消费者在处理同一条信息,而且对于

  • 我有一个Kafka Streams拓扑,其中我加入了5个表,每个表都是在一个主题上创建的,该主题由一些Kafka连接器填充,这些连接器产生KeyValue事件,其中Key是针对相同的Avro模式产生的,但在我的拓扑中,当我加入这些表时,Key似乎不一样,如果它们是Java等于事件。所有这些背后的原因是什么? 它与Confluent Schema Registry集成。 我们已经使用了调试器,并且在