卡夫卡偏移量和分区识别

时间:2019-07-16 10:07:39

标签: apache-kafka

我对卡夫卡有一些疑问。请帮助我理解问题。 根据{{​​3}},每个分区都有一个唯一的顺序ID,称为偏移量。

  1. 将如何生成偏移号,即基于消息到达分区时的偏移量,或者无论何时创建分区都会生成偏移号?

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

    enter image description here


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

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