Kafka ialah sistem pemesejan terbitan-langganan teragih yang membolehkan anda menghantar data dengan pasti antara pengeluar dan pengguna. Ia mempunyai daya pemprosesan yang tinggi, kependaman rendah dan toleransi kesalahan.
Kafka terdiri daripada komponen berikut:
Apabila pengeluar menghantar data ke gugusan Kafka, data itu ditulis kepada satu atau lebih partition. Setiap partition mempunyai beberapa salinan untuk memastikan data tidak hilang. Pengguna boleh membaca data daripada mana-mana replika.
Kafka menggunakan mekanisme yang dipanggil "offset" untuk menjejak tempat pengguna membaca data. Offset ialah integer yang mewakili jumlah data dalam partition yang telah dibaca oleh pengguna. Apabila pengguna membaca data, ia menyimpan offset dalam ZooKeeper.
Jika pengguna gagal, ia boleh dimulakan semula dari offset yang direkodkan terakhir. Ini memastikan pengguna tidak kehilangan sebarang data.
Seni bina sistem Kafka ialah sistem teragih, yang terdiri daripada berbilang nod. Setiap nod adalah proses bebas, yang boleh dijalankan pada mesin yang berbeza.
Nod Kafka berkomunikasi melalui protokol TCP. Setiap nod mengekalkan salinan metadata, yang mengandungi maklumat metadata untuk semua topik dan partition.
Apabila pengeluar menghantar data ke gugusan Kafka, ia mula-mula menghantar permintaan kepada nod metadata untuk mendapatkan maklumat tentang partition yang akan ditulis. Pengeluar kemudian akan menulis data terus ke partition tersebut.
Apabila pengguna membaca data daripada gugusan Kafka, ia mula-mula menghantar permintaan kepada nod metadata untuk mendapatkan maklumat tentang partition yang hendak dibaca. Pengguna kemudian membaca data terus dari partition tersebut.
Berikut ialah contoh kod mudah menggunakan Kafka:
// 创建一个生产者 Producer producer = new KafkaProducer(properties); // 创建一个主题 String topic = "my-topic"; // 创建一个消息 ProducerRecord<String, String> record = new ProducerRecord<>(topic, "hello, world"); // 发送消息 producer.send(record); // 创建一个消费者 Consumer consumer = new KafkaConsumer(properties); // 订阅主题 consumer.subscribe(Arrays.asList(topic)); // 轮询消息 while (true) { ConsumerRecords<String, String> records = consumer.poll(100); for (ConsumerRecord<String, String> record : records) { System.out.println(record.value()); } }
Kod contoh ini menunjukkan cara menghantar dan menerima mesej menggunakan Kafka. Anda boleh menggunakan kod sampel ini sebagai asas untuk membina aplikasi Kafka anda sendiri.
Atas ialah kandungan terperinci Analisis prinsip kerja dan rangka kerja sistem Kafka. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!