consumer.How指定要读取的分区?[卡夫卡]

gst*_*low 10 java consumer apache-kafka partition

我正在介绍kafka,我想知道如何在使用主题消息时指定分区.

我找到了几张这样的照片:

在此输入图像描述

这意味着1个消费者可以使用来自多个分区的消息,但是单个消费者可以读取1个分区(在消费者组内)

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

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); 
Run Code Online (Sandbox Code Playgroud)

和:

1.subscribe:

consumer.subscribe(Arrays.asList(“foo”, “bar”)); 
Run Code Online (Sandbox Code Playgroud)

民意调查

 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();
    }
Run Code Online (Sandbox Code Playgroud)

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

Tre*_*iac 10

有两种方法可以告诉您要使用哪些主题/分区: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

  • **您指定所需的分区和开始的偏移量**我在哪里指定偏移量? (3认同)