【问题标题】:Kafka, getting the partition from consumerRecordKafka,从 consumerRecord 获取分区
【发布时间】:2019-05-20 04:07:14
【问题描述】:

如果我有一个主题有 5 个分区,然后我有一个服务消耗这 5 个分区。然后在消费者那里我轮询并取回一组消费者记录。

每个单独的 ConsumerRecord 可以来自这 5 个分区中的任何一个吗?

我看到 ConsumerRecord 有一个方法:

int partition() { return this.partition; }

那么每次轮询中的 ConsumerRecords 数组是否会由可能来自 5 个分区中的任何一个分区的记录组成?

如果有第二个服务使用相同的 5 个分区,那么总共有 2 个服务使用相同的 5 个分区。同一条 Kafka 消息的每个服务中的分区号是否相同?

谢谢。

【问题讨论】:

    标签: apache-kafka kafka-consumer-api


    【解决方案1】:

    因此,每次轮询中的 ConsumerRecords 数组将由记录组成 哪个可以来自 5 个分区中的任何一个?

    是的,当只有一个服务在运行时,它将消耗所有 5 个分区。因此,每次轮询中的 consumerRecords 数组将由来自 5 个分区中的任何一个的记录组成。

    如果有第二个服务消耗相同的 5 个分区,那么 然后总共有 2 个服务消耗来自相同的 5 个分区。将要 同一Kafka的每个服务中的分区号相同 留言?

    如果有 2 个服务实例正在运行,由于两个实例都在同一个消费者组中,它们将从不同的分区消费(例如,第一个实例将从第一个和第二个分区消费。第二个实例将从第 3、4、5 个分区消费) .因此,两个实例中消息的分区号不会相同。

    消费者使用消费者组名称(consumer.id)标记自己,并且发布到主题的每条记录都会传递到每个订阅消费者组中的一个消费者实例。

    在您的情况下,您有 2 个消费者(2 个实例)属于同一个消费者组,因此每个实例将从不同的分区消费,以便两个消费者共同从所有分区获取数据。

    如果两个服务都在不同的消费者组中。

    在这种情况下,对于相同的 Kafka 消息,每个服务中的分区号将相同。

    【讨论】:

    • 消费者简介,见kafka consumer intro
    • 对不起,我的意思是说这两个服务属于不同的消费者群体。同一条 Kafka 消息的每个服务\消费者组中的分区号是否相同?
    • @mrmannione 是的,基本上这两个服务都将从所有 5 个分区中读取。因此,来自所有 5 个分区的消息都将被两个服务读取。因此,消息的分区号将相同。
    猜你喜欢
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 2016-05-28
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 2017-11-10
    相关资源
    最近更新 更多