【问题标题】:Kafka, will different partitions have the same offset numberKafka,不同的分区会有相同的偏移量吗
【发布时间】:2019-05-18 00:28:49
【问题描述】:

我有一个 Kafka 主题和该主题的五个分区。将有5个消费群体。每个消费者组都有一个使用该主题的服务实例。

对于 Kafka 中的同一条记录,每个消费者的偏移量是否相同?

【问题讨论】:

    标签: apache-kafka kafka-consumer-api


    【解决方案1】:

    偏移量是消息进入分区时由代理分配的,因此它是唯一的,并且与消费者(和消费者组)无关。它标识记录在分区内的唯一位置。 另一方面,从特定分区读取的每个消费者(在消费者组中)将跟踪自己的偏移量,这将不同于消费者(在其他消费者组中);在这种情况下,偏移量概念用于跟踪分区内从中读取消息的位置。当然它总是一个消息偏移量。

    【讨论】:

    • OK,所以同一条消息在五个不同的分区可以有不同的偏移量。
    • 当一条消息进入一个主题时,它只进入一个分区,不会复制到 5 个分区。
    • @ppatierno 你的意思是offset 在生产者上下文和消费者上下文中是不同的吗?假设生产者为消息提供了偏移量5。当消费者读取该消息时,它只是将偏移量 5 标记为已读。它们有何不同?
    • 另外,我觉得 OP 的意思是,如果我们有 5 个分区并发送 10 条消息,偏移量是否从 0 开始并以 9 结束?还是 5 个分区中的每个分区的偏移量都是 0 ,1?
    • 生产者没有为消息分配偏移量。生产者只是发送一条消息,代理将消息“附加”到具有下一个可用偏移量的分区(这是一个日志)。当然,当消费者消费该消息时,它将获得相同的消息偏移量,因为它是它在分区中的位置。最后,偏移量不是跨分区分配的。因此,在您的示例中(5 个分区并发送 10 条消息),它们将在每个分区中获得偏移量 0 和 1(当然假设您使用的是默认的循环分区)。
    【解决方案2】:

    如果您指的是消息的顺序,那么通过偏移量,是的。对于所有消费者来说都是一样的,因为排序是由生产者和经纪人决定的。因此,如果主题中有 msg-1msg-2、...、msg-1000,那么所有 5 个消费者都会以特定顺序消费那些。但消费速度可能会有所不同。它有很多决定消费率的变量(例如网络延迟、网络拓扑、消费者逻辑等)。

    【讨论】:

    • 我的意思是5个不同分区中的相同消息是否具有相同的偏移量?
    • 如果您将此主题的复制因子设置为 1,则一条消息将仅发送到一个分区。如果超过一个,则选择一个副本作为领导者,其他副本成为追随者。领导者从生产者那里接受写入,而追随者只是按顺序复制消息。因此,在这种情况下,相同的消息将具有相同的偏移量。但我认为这对你的问题没有任何影响。因为只有在发生故障转移场景时才会使用副本。
    猜你喜欢
    • 1970-01-01
    • 2020-06-15
    • 2017-11-25
    • 2019-11-25
    • 1970-01-01
    • 2021-02-22
    • 2018-10-08
    • 1970-01-01
    相关资源
    最近更新 更多