kafkaで紹介しています。トピックからのメッセージを消費するときにパーティションを指定する方法を知りたいです。
このような写真をいくつか見つけました。
これは、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);
そして:
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();
}
これはどのように作動しますか?どのパーティションからメッセージを読みますか?
どのトピック/パーティションを消費したいかを伝える方法は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