有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我是在介绍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) 个答案

  1. # 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