web-dev-qa-db-ja.com

コンシューマー:読み取るパーティションを指定するには? [カフカ]

kafkaで紹介しています。トピックからのメッセージを消費するときにパーティションを指定する方法を知りたいです。

このような写真をいくつか見つけました。

enter image description here

これは、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); 

そして:

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

これはどのように作動しますか?どのパーティションからメッセージを読みますか?

9
gstackoverflow

どのトピック/パーティションを消費したいかを伝える方法は2つあります。 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

9
Treziac