消费者如何指定分区进行读取?【kafka】

16

我正在学习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个回答

19
有两种方法可以确定你要消费的主题/分区:KafkaConsumer#assign()(指定你想要的分区和开始的偏移量)和subscribe(加入一个消费者组,由组协调器根据同一消费者组中的消费者动态地分配分区/偏移量,并且可能在运行时更改)。
在这两种情况下,你需要使用poll来接收数据。
请查看https://kafka.apache.org/0110/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html,特别是“消费者组和主题订阅”和“手动分区分配”部分。

3
你需要指定你想要的分区和开始位置的偏移量。那么我在哪里指定偏移量呢? - gstackoverflow
1
public void seek(TopicPartition partition, long offset) 公共的无返回值方法,用于定位到指定主题分区(TopicPartition)和偏移量(offset)。 - Mário de Sá Vera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接