【问题标题】:Do the messages with the same key but from different Kafka producers go to different partitions?具有相同密钥但来自不同 Kafka 生产者的消息是否会转到不同的分区?
【发布时间】:2020-01-12 01:16:24
【问题描述】:

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

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

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

Kafka 不会跨生产者保持分区分配吗?

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

如果我将两个生产者设置为使用相同的 id 会有帮助吗?

【问题讨论】:

  • 如果您使用 key1 发送消息,之后使用相同的 key1 发送消息,来自一个或多个生产者,它应该在同一个分区中结束。您是否可能在发送这 2 条消息之间增加了分区数?
  • 您使用哪些客户端库?什么版本的 Apache Kafka?

标签: apache-kafka


【解决方案1】:

消息如何分配给分区可以根据configuration setpartitioner.class 传递给生产者API 来配置每个生产者。如果你想自己写,有一个interface

这默认为org.apache.kafka.clients.producer.internals.DefaultPartitioner,它使用键的散列来确保同一键的所有消息最终都在同一个分区中。

【讨论】:

    【解决方案2】:

    感谢大家的 cmets 和回答。

    原因是 Kafka 库之一 node-rdkafka 使用了与 Java 生产者 https://github.com/Blizzard/node-rdkafka/issues/616 不同的默认分区器。

    partioner 配置更改为murmur2_random 有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-25
      • 2019-07-01
      相关资源
      最近更新 更多