Kafka Offset 和 Partition 识别

Rav*_*avi 5 apache-kafka

我有几个问题来自卡夫卡。请帮助我理解问题。根据官方文档,每个分区都有一个唯一的顺序 ID,称为偏移量。

  1. 如何生成偏移量,即基于消息到达分区,或者在创建分区时生成偏移量?

  2. 相同的偏移 ID/编号是否会在另一个分区中生成/存在,因为每个分区彼此独立?

  3. 如果可以在另一个分区中使用相同的偏移量,那么消费者如何唯一地标识跨多个分区的消息?

  4. 消费者如何知道特定偏移量属于特定分区?请让我在两种情况下都理解,例如带键和不带键的消息?

Gio*_*ous 11

  1. 每个分区按顺序维护它收到的消息,其中它们由偏移量标识。此偏移量是一个序列号,它会自动生成并分配给消息。

  1. 是的,这是正确的。消息排序仅在分区级别得到保证。这意味着如果您有一个具有多个分区的主题,则不同分区上的消息可能具有相同的偏移量。因此,偏移量仅在单个分区内才具有真正含义(如下图所示,该图片取自Kafka Docs)。

    在此处输入图片说明


3/4。消费者订阅了主题,但在幕后他们订阅了特定的分区(好吧,如果消费者组中有一个消费者,它将订阅所有分区)。因此,当消费者从特定分区读取消息时,它可以使用它们在整个分区中维护的唯一偏移量来唯一标识消息。正如我已经提到的,消息顺序仅在单个分区内得到保证。

请注意,没有键的消息将以循环方式均匀分布在主题的分区中。另一方面,具有相同键的消息将存储在同一分区中,因此,您可以使用键来存储和排序具有相同键的消息。例如,如果您需要处理用户并且希望为每个不同的用户提供订单保证,则可以将其userID用作键,以便该用户的所有事件都存储在同一分区中。稍后,您将能够按照最初收到的顺序使用这些特定于用户的消息。