Kafka ialah sistem pemesejan terbitan-langganan teragih yang boleh mengendalikan sejumlah besar data dan mempunyai kebolehpercayaan dan skalabiliti yang tinggi. Prinsip pelaksanaan Kafka adalah seperti berikut:
Data dalam Kafka disimpan dalam topik, dan setiap topik boleh dibahagikan kepada berbilang partition. Partition ialah unit storan terkecil dalam Kafka, yang merupakan fail log tidak berubah yang tersusun. Pengeluar menulis data ke topik, dan pengguna membaca data daripada topik.
Pengeluar ialah proses atau benang yang menulis data kepada Kafka. Pengeluar boleh menulis data ke mana-mana partition mana-mana topik. Pengguna ialah proses atau urutan yang membaca data daripada Kafka. Pengguna boleh melanggan satu atau lebih topik dan membaca data daripada topik ini.
Mesej dalam Kafka terdiri daripada dua bahagian: kunci dan nilai. Kuncinya adalah pilihan dan boleh digunakan untuk mengumpulkan atau mengisih mesej. Nilai ialah kandungan sebenar mesej.
Kafka menggunakan sistem fail teragih untuk menyimpan data. Data untuk setiap partition disimpan dalam fail berasingan. Fail ini direplikasi kepada berbilang pelayan untuk memastikan kebolehpercayaan data.
Kafka menggunakan protokol pemesejan yang dipanggil "protocol buffer". Protokol ini ialah format binari yang boleh menghantar data dengan cekap.
Kafka ialah sistem yang sangat tersedia. Ia secara automatik boleh mengesan dan memulihkan pelayan yang gagal. Selain itu, Kafka juga menyokong replikasi data untuk memastikan keselamatan data.
Kafka ialah sistem berskala. Ia memudahkan untuk menambah atau mengalih keluar pelayan untuk memenuhi keperluan yang berubah-ubah.
Baris gilir mesej Kafka boleh digunakan dalam pelbagai senario aplikasi, termasuk:
Kafka boleh digunakan untuk mengumpul dan mengagregatkan data log daripada sistem yang berbeza. Ini membantu pentadbir mencari dan menganalisis data log dengan cepat.
Kafka boleh digunakan untuk memproses data penstriman. Data penstriman merujuk kepada data yang dijana secara berterusan, seperti log akses tapak web, data penderia, dsb. Kafka boleh memproses data ini dalam masa nyata dan menyimpan atau memajukannya ke sistem lain.
Kafka boleh digunakan untuk membina sistem pesanan. Sistem pemesejan membenarkan data ditukar antara sistem yang berbeza. Kafka boleh memastikan penghantaran mesej yang boleh dipercayai dan menyokong berbilang format mesej.
Kafka boleh digunakan untuk membina seni bina dipacu acara. Seni bina dipacu acara ialah corak reka bentuk perisian yang membolehkan sistem yang berbeza berkomunikasi melalui acara. Kafka boleh digunakan sebagai bas acara untuk menghantar acara dari satu sistem ke sistem yang lain.
Kafka boleh digunakan untuk membina seni bina perkhidmatan mikro. Seni bina Microservices ialah corak reka bentuk perisian yang memecahkan aplikasi kepada berbilang perkhidmatan kecil bebas. Kafka boleh bertindak sebagai broker mesej untuk menghubungkan perkhidmatan kecil ini.
Berikut ialah contoh kod yang menggunakan Kafka untuk menghantar dan menerima mesej:
import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerConfig; import org.apache.kafka.clients.producer.ProducerRecord; import org.apache.kafka.clients.consumer.KafkaConsumer; import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.ConsumerRecord; import java.util.Properties; public class KafkaExample { public static void main(String[] args) { // 创建一个生产者 Properties producerProps = new Properties(); producerProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); producerProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer"); producerProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer"); KafkaProducer<String, String> producer = new KafkaProducer<>(producerProps); // 创建一个消费者 Properties consumerProps = new Properties(); consumerProps.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); consumerProps.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); consumerProps.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); consumerProps.put(ConsumerConfig.GROUP_ID_CONFIG, "my-group"); KafkaConsumer<String, String> consumer = new KafkaConsumer<>(consumerProps); // 订阅主题 consumer.subscribe(Collections.singletonList("my-topic")); // 发送消息 producer.send(new ProducerRecord<String, String>("my-topic", "Hello, Kafka!")); // 接收消息 while (true) { ConsumerRecords<String, String> records = consumer.poll(100); for (ConsumerRecord<String, String> record : records) { System.out.println(record.key() + ": " + record.value()); } } // 关闭生产者和消费者 producer.close(); consumer.close(); } }
Contoh kod ini menunjukkan cara menggunakan Kafka untuk menghantar dan menerima mesej. Pertama, kita perlu mencipta pengeluar dan pengguna dan mengkonfigurasi sifat yang sepadan. Kami kemudiannya boleh menggunakan pengeluar untuk menghantar mesej kepada topik dan pengguna untuk membaca mesej daripada topik tersebut.
Atas ialah kandungan terperinci Analisis mendalam tentang prinsip teknikal dan senario yang boleh digunakan bagi baris gilir mesej Kafka. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!