如何指定要读取的分区[[Kafka]

8gsdolmq  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(347)

我正在介绍kafka,我想知道当我使用来自topic的消息时如何指定分区。
我发现了几张这样的照片:

这意味着一个使用者可以使用来自多个分区的消息,但是一个分区可以由单个使用者读取(在使用者组内)
此外,我还阅读了几个消费者示例,如下所示:

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);

以及:

1.订阅:

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

2. 投票

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();
    }

这是怎么回事?我将从哪个分区读取消息?

vzgqcmou

vzgqcmou1#

有两种方法可以告诉您要使用哪个主题/分区:kafkaconsumer#assign()(指定所需的分区和开始位置的偏移量)和 subscribe (加入使用者组,分区/偏移量将由组协调器根据同一使用者组中的使用者动态分配,并且在运行时可能会更改)
在这两种情况下,你都需要 poll 接收数据。
看到了吗https://kafka.apache.org/0110/javadoc/index.html?org/apache/kafka/clients/consumer/kafkaconsumer.html尤其是段落 Consumer Groups and Topic Subscriptions 以及 Manual Partition Assignment

相关问题