トピックの最初からすべてのメッセージをサーバーから取得したいと思います。
例:
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic testTopic --from-beginning
上記のコンソールコマンドを使用する場合、トピックのすべてのメッセージを最初から取得したいのですが、Javaコードを使用すると、トピックのすべてのメッセージを最初から消費することができませんでした。
最も簡単な方法は、コンシューマを起動してすべてのメッセージを排出することです。トピックにパーティションがいくつあるか、また既存のコンシューマグループがすでにあるかどうかはわかりませんが、いくつかのオプションがあります。
このAPIを見てください: https://kafka.Apache.org/090/javadoc/index.html?org/Apache/kafka/clients/consumer/KafkaConsumer.html
1)同じコンシューマグループにすでにコンシューマがあり、それでも最初から消費を開始したい場合は、APIドキュメントにリストされているseek
オプションを使用して、各コンシューマのオフセットを0に設定する必要がありますグループ。これは最初から消費し始めます。
2)それ以外の場合は、新しいコンシューマグループで数人のコンシューマを開始できます。シークについて心配する必要はありません。
PS:Kafkaについて他にご不明な点がありましたら、今後の設定について詳細をお知らせください。多くのことは、インフラストラクチャの構成方法と、それをどのようにしたいかによって異なり、したがって、ケースごとに異なります。
TopicPartition topicPartition = new TopicPartition(topic, 0);
List<TopicPartition> partitions = Arrays.asList(topicPartition);
consumer.assign(partitions); consumer.seekToBeginning(partitions);
次のコマンドを使用して、すべてのメッセージを取得できます。
cd Users/kv/kafka/bin
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topicName --from-beginning --max-messages 100
消費者グループを変更するだけ
ConsumerConfig.GROUP_ID_CONFIG-新しいグループIDへ
そして設定
AUTO_OFFSET_RESET_CONFIG-最も早い
サンプルコード-
props.put(ConsumerConfig.GROUP_ID_CONFIG, "newID");
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");