私はパブ/サブアプリケーションを構築しようとしています。私はその中で最良のツールを模索しています。私は現在カフカを見ていて、少し動いているデモアプリをすでに持っています。しかし、私は概念的な問題にぶつかっています。コンシューマーが接続されていないときにKafkaブローカーがメッセージを保持できますか?
私は(ジャワコード)プロデューサを有する:
String topicName = "MyTopic;
String key = "MyKey";
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092,localhost:9093");
props.put("acks", "all");
props.put("key.serializer","org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.ByteArraySerializer");
Producer<String, byte[]> producer = new KafkaProducer <String, byte[]>(props);
byte[] data = <FROM ELSEWHERE>;
ProducerRecord<String, byte[]> record = new ProducerRecord<String, byte[]>(topicName, key, data);
try {
RecordMetadata result = producer.send(record).get();
}
catch (Exception e) {
// Nothing for now
}
producer.close();
IはKakfaコマンドラインツールを介して消費者開始:
kafka-console-consumer --bootstrap-server localhost:9092 --topic MyTopic
、次いでI生産コードを実行し、I私の消費者端末に表示されるデータメッセージを参照してください。しかし
、私はががプロデューサーを実行する以前に、消費者を実行しない場合、メッセージは、「失われた」と表示されます。私が(プロデューサを実行した後に)コンシューマを起動すると、コンシューマ端末に何も表示されません。
カフカブローカーをお持ちであるかどうか知っている人は誰でものメッセージを保持していますが、コンシューマは接続されていません。もしそうなら、どうですか?
問題がなくなるかどうかを確認するために '--from-beginning'を追加してみてください。デフォルトのオフセットリセット戦略が原因である可能性があります。コンシューマ設定の 'auto.offset.reset'の詳細を参照してください。 – amethystic
@amethysticうん、それはそれをした!参照ありがとう。これを答えに入れて、私は受け入れます。また、他のすべての「失われた」メッセージも表示されていることを確認することは素晴らしいことです。 – Brett
学習中にこれらの設定を見逃すことのない出発点は、https://kafka.apache.org/quickstartです。 – randominstanceOfLivingThing