【问题标题】:Kafka: Write custom partitioner or just use Key?Kafka:编写自定义分区器还是只使用 Key?
【发布时间】:2018-07-04 19:04:07
【问题描述】:

所以我有一个包含多个分区的 Kafka 主题,并且我正在其上生成消息。我希望我的消息根据用户 ID 进行分区。我可以通过使用 UserId 作为消息键或编写自定义分区器来实现这一点。我如何确定哪个是正确的解决方案,优缺点是什么?

【问题讨论】:

  • 很难说出你在问什么。请添加详细信息或澄清问题,以便提供明智的答复。

标签: apache-kafka message-queue kafka-producer-api


【解决方案1】:

如您所知,使用 user-id 作为键,您确信具有相同 user-id 的消息将始终传送到同一个分区,但您无法决定分区本身。我的意思是默认分区程序会处理键 % number of partitions 上的哈希,以获得目标分区。 如果在您的应用程序中,您需要将具有特定用户 ID 的消息转到特定分区(即,您希望以“A”开头的用户 ID 转到分区 0),则需要编写自定义分区程序。 如果您没有限制,我认为使用用户 ID 作为键的默认分区程序对您来说很好。 无论如何,在发送和接收之后,您都会获得有关分区的信息。

【讨论】:

  • 所以自定义分区器更多是为了确保消息在特定分区中结束,而不是确保消息在同一个分区中结束?当我想控制消息最终进入哪个特定分区时,您是否碰巧有一个用例?
  • 是的。你可以用这种方式来做分区器,因为你正在编写它,所以这意味着你必须编写定义目标分区的逻辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-22
  • 2014-07-08
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多