web-dev-qa-db-fra.com

consommateur.Comment spécifier la partition à lire? [kafka]

J'introduis avec kafka et je veux savoir comment spécifier la partition quand je consomme des messages du sujet.

J'ai trouvé plusieurs photos comme celle-ci:

enter image description here

Cela signifie qu'un consommateur peut consommer des messages de plusieurs partitions mais qu'une partition peut être lue par un seul consommateur (au sein du groupe de consommateurs)

J'ai également lu plusieurs exemples pour le consommateur et cela ressemble à ceci:

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

et:

1. souscrire:

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

2. sondage

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

Comment cela marche-t-il? De quelle partition vais-je lire les messages?

9
gstackoverflow

Il y a deux façons de dire quel sujet/quelles partitions vous voulez consommer: KafkaConsumer # assign () (vous spécifiez la partition que vous voulez et l'offset par où vous commencez) et subscribe (vous rejoindre un groupe de consommateurs, et la partition/l'offset sera assigné dynamiquement par le coordinateur de groupe en fonction des consommateurs du même groupe de consommateurs, et peut changer pendant l'exécution)

Dans les deux cas, vous devez poll pour recevoir les données.

Voir https://kafka.Apache.org/0110/javadoc/index.html?org/Apache/kafka/clients/consumer/KafkaConsumer.html , en particulier les paragraphes Consumer Groups and Topic Subscriptions et Manual Partition Assignment

9
Treziac