Apache kafka 卡夫卡偏移量与分区识别

Apache kafka 卡夫卡偏移量与分区识别,apache-kafka,Apache Kafka,卡夫卡问了我几个问题。请帮助我理解这个问题。 根据,每个分区将有一个唯一的顺序id,称为偏移量 如何生成偏移量编号,即基于到达分区的消息,或在创建分区时生成偏移量编号 由于每个分区相互独立,是否在另一个分区中生成/存在相同的偏移ID/编号 如果在另一个分区中可以使用相同的偏移量,那么使用者如何跨多个分区唯一地标识消息 使用者如何知道特定偏移量属于特定分区?请让我了解在这两种情况下,比如有钥匙的消息和没有钥匙的消息 每个分区都按顺序维护它接收到的消息,这些消息由偏移量标识。此偏移量是一个序列号,它

卡夫卡问了我几个问题。请帮助我理解这个问题。 根据,每个分区将有一个唯一的顺序id,称为偏移量

  • 如何生成偏移量编号,即基于到达分区的消息,或在创建分区时生成偏移量编号

  • 由于每个分区相互独立,是否在另一个分区中生成/存在相同的偏移ID/编号

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

  • 使用者如何知道特定偏移量属于特定分区?请让我了解在这两种情况下,比如有钥匙的消息和没有钥匙的消息

  • 每个分区都按顺序维护它接收到的消息,这些消息由偏移量标识。此偏移量是一个序列号,它自动生成并分配给消息
  • 是的,这是正确的。只有在分区级别上才能保证消息顺序。这意味着,如果主题具有多个分区,则不同分区上的消息可能具有相同的偏移量。因此,偏移量只有在单个分区内才有真正的意义(正如您在下面的图片中所看到的,这张图片取自)


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


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

    谢谢你的重播