記事のディレクトリ
1つは、KafkaAPIコードのアイデアです
1、プロデューサー
- Kafkaクラスターのセットアップ、ポリシー構成の確認、K、Vシリアル化
- プロデューサーオブジェクトを作成する
- プロデューサー情報レコード(トピック、キー、値)を作成し、送信します
参考記事:カフカのプロデューサー
2、消費者
- クラスターのポート番号、コンシューマーグループ、K、Vの逆シリアル化、自動送信モード、自動送信時間を構成します
- 消費者を作成する
- コンシューマーが消費したいトピックパーティションを作成します。複数のパーティションが消費される場合は、それらをArrayListにインストールします。
- トピックのパーティション情報をコンシューマーに委任する
- 消費者は定期的にデータを取得します
2.依存
Mavenと入力し、対応するバージョンを選択します
この例で使用されkafka_2.11-2.0.0
ているkafkaのバージョンはです。対応するバージョンをscala2.11、kafka2.0.0として選択し、kafkaとkafka-clientの依存関係をインポートします。
<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka -->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.11</artifactId>
<version>2.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients -->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.0.0</version>
</dependency>
3、JavaAPI
1、kafka-プロデューサー
public void writeMsg(String msg){
Properties prop = new Properties();
prop.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"single:9092");
prop.put(ProducerConfig.ACKS_CONFIG,"all");
prop.put(ProducerConfig.RETRIES_CONFIG,"0");
prop.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getTypeName());
prop.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getTypeName());
KafkaProducer<String, String> producer = new KafkaProducer<>(prop);
ProducerRecord<String, String> rec = new ProducerRecord<>("mydemo3", msg);
producer.send(rec);
producer.close();
}
Kafka_demo2 producer = new Kafka_demo2();
for (int i = 0; i < 5; i++) {
producer.writeMsg("龙门飞甲"+i);
}
2、kafka-消費者
public void readMsg(){
Properties prop = new Properties();
prop.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,"single:9092");
prop.put(ConsumerConfig.GROUP_ID_CONFIG,"xym");
prop.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getTypeName());
prop.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,StringDeserializer.class.getTypeName());
prop.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG,"true");
prop.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG,"1000");
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(prop);
TopicPartition tp = new TopicPartition("mydemo3", 0);
List<TopicPartition> list = new ArrayList<>();
list.add(tp);
consumer.assign(list);
while (true){
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
records.forEach(x->{
System.out.println(x.toString());
});
}
}
public static void main(String[] args) {
new Kafka_demo().readMsg();
}
4、ScalaAPI
1、kafka-プロデューサー
object Kafka_scala_Producer{
def writeMsg(msg:String) = {
val prop = new Properties()
val map = Map(
"bootstrap.servers" -> "single:9092",
"acks" -> "all",
"key.serializer" -> "org.apache.kafka.common.serialization.StringSerializer",
"value.serializer" -> "org.apache.kafka.common.serialization.StringSerializer"
)
map.foreach(x=>{
prop.put(x._1,x._2)
})
val producer = new KafkaProducer[String, String](prop)
val rec = new ProducerRecord[String, String]("mydemo3", msg)
producer.send(rec);
producer.close()
}
def main(args: Array[String]): Unit = {
for (i<-5 to 100){
writeMsg("龙门飞甲"+i)
Thread.sleep(1000)
}
}
}
2、kafka-消費者
object Kafka_scala_Consumer{
def readMsg()={
val prop = new Properties()
val map = Map(
"bootstrap.servers" -> "single:9092",
"group.id" -> "xym",
"enable.auto.commit" -> "true",
"auto.commit.interval.ms" -> "1000",
"key.deserializer" -> "org.apache.kafka.common.serialization.StringDeserializer",
"value.deserializer" -> "org.apache.kafka.common.serialization.StringDeserializer"
)
map.foreach(x=>{
prop.put(x._1,x._2)
})
val consumer = new KafkaConsumer[String, String](prop)
val tp = new TopicPartition("mydemo3", 0)
val list = new util.ArrayList[TopicPartition]()
list.add(tp)
consumer.assign(list)
while (true){
val records = consumer.poll(Duration.ofMillis(100))
val it = records.iterator()
while (it.hasNext) {
val next = it.next()
println(next.toString)
}
}
}
def main(args: Array[String]): Unit = {
readMsg()
}
}
5.出力は次のとおりです。
ConsumerRecord(topic = mydemo3, partition = 0, offset = 58, CreateTime = 1616874277813,
serialized key size = -1, serialized value size = 13, headers = RecordHeaders(headers = [],
isReadOnly = false), key = null, value = 龙门飞甲0)
ConsumerRecord(topic = mydemo3, partition = 0, offset = 59, CreateTime = 1616874277859,
serialized key size = -1, serialized value size = 13, headers = RecordHeaders(headers = [],
isReadOnly = false), key = null, value = 龙门飞甲1)
ConsumerRecord(topic = mydemo3, partition = 0, offset = 60, CreateTime = 1616874277890,
serialized key size = -1, serialized value size = 13, headers = RecordHeaders(headers = [],
isReadOnly = false), key = null, value = 龙门飞甲2)
ConsumerRecord(topic = mydemo3, partition = 0, offset = 61, CreateTime = 1616874277922,
serialized key size = -1, serialized value size = 13, headers = RecordHeaders(headers = [],
isReadOnly = false), key = null, value = 龙门飞甲3)
ConsumerRecord(topic = mydemo3, partition = 0, offset = 62, CreateTime = 1616874277941,
serialized key size = -1, serialized value size = 13, headers = RecordHeaders(headers = [],
isReadOnly = false), key = null, value = 龙门飞甲4)