消费者。如何指定要读取的分区?[卡夫卡]

2022-09-03 06:36:01

我正在学习Kafka,我想知道当我使用来自主题的消息时如何指定然后分区。

我发现了几张这样的图片:

enter image description here

这意味着使用者可以使用来自多个分区的消息,但一个分区只能由单个使用者(在使用者组中)读取。

另外,我已经阅读了消费者的几个例子,它们看起来像这样:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "consumer-tutorial");
props.put("key.deserializer", StringDeserializer.class.getName());
props.put("value.deserializer", StringDeserializer.class.getName());
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props); 

和:

订阅:

consumer.subscribe(Arrays.asList(“foo”, “bar”)); 

民意调查

 try {
      while (running) {
        ConsumerRecords<String, String> records = consumer.poll(1000);
        for (ConsumerRecord<String, String> record : records)
            System.out.println(record.offset() + ": " + record.value());
      }
 } finally {
      consumer.close();
 }

这是如何工作的?我将从哪个分区读取消息?


答案 1

有两种方法可以判断要使用的主题/分区:KafkaConsumer#assign()(指定所需的分区和开始的偏移量)和(加入使用者组,分区/偏移量将由组协调员根据同一使用者组中的使用者动态分配,并且可能会在运行时更改)subscribe

在这两种情况下,您都需要接收数据。poll

请参阅 https://kafka.apache.org/0110/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html,特别是段落和Consumer Groups and Topic SubscriptionsManual Partition Assignment


答案 2

推荐