具有相同密钥但来自不同Kafka生产者的消息是否会转到不同的分区?

时间:2019-09-10 09:45:13

标签: apache-kafka

我有两个Kafka生产者将消息发送到具有多个分区的同一主题。

来自同一生产者PR1的具有相同密钥K1的消息总是按预期到达相同的分区PA1。

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

卡夫卡不保留跨生产者的分区分配吗?

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

如果我将两个生产者设置为使用相同的ID是否有帮助?

2 个答案:

答案 0 :(得分:0)

可以根据configuration set,并通过partitioner.classorg.apache.kafka.clients.producer.internals.DefaultPartitioner传递给Producer API,为每个生产者配置如何将消息分配给分区。如果您想自己写一个interface

这默认为{{1}},它使用键的哈希值来确保同一键的所有消息都在同一分区中。

答案 1 :(得分:0)

谢谢大家的评论和回答。

原因是其中一个Kafka库node-rdkafka使用了与Java生产商https://github.com/Blizzard/node-rdkafka/issues/616不同的默认分区程序。

partioner配置更改为murmur2_random即可。