Kafka,从consumerRecord获取分区

时间:2018-12-19 16:08:59

标签: apache-kafka kafka-consumer-api

如果我有一个包含5个分区的主题,那么我有一个消耗这5个分区的服务。然后,在消费者上,我轮询并获取了一系列ConsumerRecords。

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

我看到ConsumerRecord有一个方法:

int partition(){返回this.partition; }

那么,每次民意测验中的ConsumerRecords数组将由可以来自5个分区中的任何一个分区的记录组成吗?

如果第二个服务使用相同的5个分区,那么总共2个服务使用相同的5个分区。同一卡夫卡消息的每个服务中的分区号都一样吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

  

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

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

  

如果同一5个分区中有另一个服务正在使用,则   然后总共有2个服务使用相同的5个分区。将   同一卡夫卡的每个服务中的分区号都相同   消息吗?

如果正在运行2个服务实例,则由于两个实例都在同一个使用者组中,因此它们将在单独的分区中使用(例如,第一个实例将在第一个和第二个分区中使用。第二个实例将在第3、4、5个分区中使用) 。因此,两个实例中邮件的分区号将不同。

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

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

  

如果两种服务都属于不同的消费者组。

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