Kafka consumer api是否为您提供了使用密钥搜索主题分区号的方法?

时间:2018-01-22 02:05:04

标签: apache-kafka kafka-consumer-api

我正在处理一个包含许多消息的主题。卡夫卡水平缩放。因此,当它们分散到多个进程时,只有1个将使用特定密钥。其余的没有关系,应该停止处理。

客户端API是否有办法从密钥中散列分区号?使用分区号,我们可以阻止其他处理器浪费周期并开始处理其他事件

1 个答案:

答案 0 :(得分:0)

你不是很清楚你想要在这里实现什么,但让我解释它是如何工作的,也许我们会找到答案。 我猜你的主题有N个分区,你是从生产者发送消息,为每条消息指定一个密钥,而你正在使用默认的分区。在这种情况下,具有相同密钥的所有消息将到达相同的分区,并且使用默认分区器意味着这样的分区由密钥的散列定义(然后模块分区号)。在消费者方面,您可以在同一个消费者群体中拥有更多消费者,因此将N个分区分配给该群组的不同消费者;消费者将负责处理具有相同密钥的消息,因为他们将始终位于同一分区中。同样如果重新平衡发生(即,消费者离开该组或添加新的组),则可能发生该密钥的消费者将改变的情况。在任何情况下,您都可以知道不是来自密钥的分区,而是消费者在消息消息时公开它的ConsumerRecord类。此外,当消费者订阅主题时,您可以提供和实现ConsumerRebalanceListener接口,以便知道哪些分区被撤销/分配给每个使用者。 否则,您可以尝试使用自定义分区器,以便提供密钥,您可以使用与默认算法不同的算法来定义目标分区;在这种情况下给出密钥,你知道消费者方面的分区。 顺便说一句,我说的更多的是解释而不是对你问题的真实答案。也许你可以澄清一下?