1. Kafka の最新バージョンをダウンロードし、以下を抽出します。
kafka_2.13-3.4.0.tgzを解凍します。
2.Kafkaサービスを開始します
注: Java 8 以降がローカル環境にインストールされている必要があります。
1 Zookeeper サービスを開始します
cd kafka_2.13-3.4.0/bin/windows
zookeeper-server-start.bat ../../config/zookeeper.properties
2. Kafka ブローカー サービスを開始します。
cd kafka_2.13-3.4.0/bin/windows
kafka-server-start.bat ../../config/server.properties
OK、これで基本的な Kafka 環境が完成しました
3. メッセージを保存するトピックを作成する
KAFKA は、多くのマシン間でイベント (ドキュメント内のレコードまたはメッセージとも呼ばれます) の読み取り、書き込み、保存、処理を可能にする分散イベント ストリーミング プラットフォームです。
アクティビティの例としては、支払いトランザクション、携帯電話からの位置情報の更新、発送注文、IoT デバイスや医療機器からのセンサー測定などが挙げられます。これらのイベントはトピックに編成され、保存されます。非常に単純化すると、トピックはファイル システム内のフォルダーのようなもので、イベントはそのフォルダー内のファイルです。
したがって、最初のイベントを作成する前に、トピックを作成する必要があります。別のターミナル セッションを開き、次を実行します。
kafka-topics.bat --create --topic quickstart-events --bootstrap-server localhost:9092
結果:
Created topic quickstart-events.
Kafka のコマンド ライン ツールにはすべて追加オプションがあります。引数を指定せずに Kafka-Topics.sh コマンドを実行すると、使用方法の情報が表示されます。たとえば、新しいトピックのパーティション数などの詳細を表示することもできます。
kafka-topics.bat --describe --topic quickstart-events --bootstrap-server localhost:9092
結果
Topic: quickstart-events TopicId: iQ9QVKwkQ1epRjA-BnvxvA PartitionCount: 1 ReplicationFactor: 1 Configs:
Topic: quickstart-events Partition: 0 Leader: 0 Replicas: 0 Isr: 0
4. トピックにメッセージを書き込みます
Kafka クライアントは、書き込み (または読み取り) イベントのためにネットワーク経由で Kafka ブローカーと通信します。アクティビティを受信すると、ブローカーは必要な限り、耐久性のある方法でアクティビティを保存します。
コンソール プロデューサー クライアントを実行して、いくつかのイベントをトピックに書き込みます。デフォルトでは、入力する各行により、個別のイベントがトピックに書き込まれます。
kafka-console-producer.bat --topic quickstart-events --bootstrap-server localhost:9092
This is my first event
This is my second event
CTRL-C を押すと、いつでもプロデューサー クライアントを停止できます。
Java はメッセージの送信を実装します
Properties props = new Properties();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,org.apache.kafka.common.serialization.StringSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, org.apache.kafka.common.serialization.StringSerializer.class);
KafkaProducer producer = new KafkaProducer(props);
try {
for (int i =0 ; i <100; i++) {
String key = "key"+i;
String message = "message"+i;
ProducerRecord<Object, Object> record = new ProducerRecord<>("topic1", key, message);
try {
System.out.println("sending message"+i);
producer.send(record);
} catch(SerializationException e) {
e.printStackTrace();
}
}
}finally {
producer.flush();
producer.close();
}
5. メッセージを読む
別のターミナル セッションを開き、コンソール コンシューマ クライアントを実行して、作成したイベントを読み取ります。
kafka-console-consumer.bat --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
This is my first event
This is my second event
CTRL-C を押すと、いつでもコンシューマ クライアントを停止できます。
自由に実験してください。たとえば、プロデューサー端末 (前のステップ) に戻って追加のイベントを作成し、これらがコンシューマー端末にどのように即座に表示されるかを確認してください。
イベントは Kafka 内で永続化されるため、必要なだけ多くのコンシューマーがイベントを読み取ることができます。これは、別のターミナル セッションを開いて前のコマンドを再実行することで簡単に確認できます。
メッセージを読み取る Java コード
Properties props = new Properties();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.put(ConsumerConfig.GROUP_ID_CONFIG, "group1");
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
String topic = "topic1";
final Consumer<String, GenericRecord> consumer = new KafkaConsumer<String, GenericRecord>(props);
consumer.subscribe(Arrays.asList(topic));
try {
while (true) {
ConsumerRecords<String, GenericRecord> records = consumer.poll(100);
for (ConsumerRecord<String, GenericRecord> record : records) {
System.out.printf("offset = %d, key = %s, value = %s \n", record.offset(), record.key(), record.value());
}
}
} finally {
consumer.close();
}
参考文献
https://kafka.apache.org/quickstart
https://codenotfound.com/spring-kafka-apache-avro-serializer-deserializer-example.html