我对卡夫卡有一些疑问。请帮助我理解问题。 根据{{3}},每个分区都有一个唯一的顺序ID,称为偏移量。
将如何生成偏移号,即基于消息到达分区时的偏移量,或者无论何时创建分区都会生成偏移号?
在另一个分区中是否会生成/存在相同的偏移ID /编号,因为每个分区彼此独立吗?
如果在另一个分区中可能有相同的偏移量,那么消费者如何跨多个分区唯一地标识消息?
消费者如何知道特定偏移量属于特定分区?请让我在两种情况下都理解,例如带钥匙和不带钥匙的消息?
答案 0 :(得分:1)
是的,这是正确的。仅在分区级别上保证消息排序。这意味着,如果您的主题具有多个分区,则不同分区上的消息可能具有相同的偏移量。因此,偏移量仅在单个分区内才具有真正的含义(如下图所示,该图片取自Kafka Docs)。
3/4。使用者订阅了主题,但是在幕后他们订阅了特定的分区(嗯,如果您在使用者组中只有一个使用者,它将订阅所有分区)。因此,当使用者从特定分区读取消息时,它可以使用在整个分区中维护的唯一偏移量来唯一标识消息。正如我已经提到的,仅在单个分区内保证消息顺序。
请注意,没有密钥的消息将以循环方式均匀分布在主题的各个分区中。另一方面,具有相同密钥的消息将存储在同一分区中,因此,您可以使用该密钥来存储和订购具有相同密钥的消息。例如,如果您需要处理用户,并且希望为每个不同的用户提供订单保证,则可以使用userID
作为键,以便将该用户的所有事件存储在同一分区中。稍后,您将能够按照最初收到它们的顺序使用这些用户特定的消息。