Maison >Java >javaDidacticiel >Compréhension approfondie du mécanisme de mise en œuvre sous-jacent de la file d'attente de messages Kafka
Le principe de mise en œuvre sous-jacent de la file d'attente de messages Kafka
Vue d'ensemble
Kafka est un système de file d'attente de messages distribué et évolutif qui peut gérer de grandes quantités de données et a un débit élevé et une faible latence. Kafka a été initialement développé par LinkedIn et constitue désormais un projet de haut niveau de l'Apache Software Foundation.
Architecture
Kafka est un système distribué composé de plusieurs serveurs. Chaque serveur est appelé un nœud et chaque nœud est un processus indépendant. Les nœuds sont connectés via un réseau pour former un cluster.
Les données d'un cluster Kafka sont stockées dans des partitions, et chaque partition est un fichier journal ordonné et immuable. La partition est l'unité de base du stockage de données Kafka et l'unité de base de Kafka pour la réplication et le basculement des données.
Les données d'un cluster Kafka sont accessibles aux producteurs et aux consommateurs. Les producteurs écrivent des données sur le cluster Kafka et les consommateurs lisent les données du cluster Kafka.
Stockage de données
Les données dans Kafka sont stockées dans des partitions, et chaque partition est un fichier journal ordonné et immuable. La partition est l'unité de base du stockage de données Kafka et l'unité de base de Kafka pour la réplication et le basculement des données.
Chaque partition a un identifiant unique et se compose d'un nœud leader et de plusieurs nœuds de réplique. Le nœud leader est responsable de l'écriture des données sur la partition et le nœud réplica est responsable de la copie des données du nœud leader.
Lorsque le producteur écrit des données sur le cluster Kafka, les données seront écrites sur le nœud leader. Le nœud leader répliquera les données sur les nœuds de réplique. Lorsqu'un consommateur lit des données du cluster Kafka, les données sont lues à partir du nœud de réplication.
Réplication des données
La réplication des données dans Kafka est réalisée grâce au mécanisme de copie. Chaque partition possède un nœud leader et plusieurs nœuds de réplique. Le nœud leader est responsable de l'écriture des données sur la partition et le nœud réplica est responsable de la copie des données du nœud leader.
Lorsque le nœud leader échoue, l'un des nœuds répliques deviendra le nouveau nœud leader. Le nouveau nœud leader continuera à écrire des données sur la partition et à copier les données d'autres nœuds de réplique.
Le mécanisme de réplication des données dans Kafka peut garantir la fiabilité et la disponibilité des données. Même si le nœud leader tombe en panne, les données ne sont pas perdues et les consommateurs peuvent toujours lire les données du cluster Kafka.
Failover
Le basculement dans Kafka est implémenté via le mécanisme de réplique. Lorsque le nœud leader échoue, l'un des nœuds de réplique devient le nouveau nœud leader. Le nouveau nœud leader continuera à écrire des données sur la partition et à copier les données d'autres nœuds de réplique.
Le mécanisme de basculement de Kafka garantit la fiabilité et la disponibilité des données. Même si le nœud leader tombe en panne, les données ne sont pas perdues et les consommateurs peuvent toujours lire les données du cluster Kafka.
Producers
Les producteurs sont des clients qui écrivent des données sur le cluster Kafka. Un producteur peut être n'importe quel client capable d'envoyer des requêtes HTTP, tel qu'une application Java, une application Python ou une application C++.
Lorsque le producteur écrit des données sur le cluster Kafka, il doit spécifier la partition à écrire. Les producteurs peuvent choisir d'écrire des données sur des partitions spécifiques ou d'écrire des données sur des partitions aléatoires.
Les producteurs peuvent également spécifier la clé de message et la valeur de message des données. La clé du message est utilisée pour identifier un message de manière unique et la valeur du message correspond au contenu réel du message.
Consumers
Les consommateurs sont des clients qui lisent les données du cluster Kafka. Un consommateur peut être n'importe quel client pouvant recevoir des requêtes HTTP, tel qu'une application Java, une application Python ou une application C++.
Lorsque les consommateurs lisent les données du cluster Kafka, ils doivent spécifier la partition à lire. Les consommateurs peuvent choisir de lire les données de partitions spécifiques ou de toutes les partitions.
Les consommateurs peuvent également spécifier le décalage à lire. Le décalage est utilisé pour identifier de manière unique un message dans la partition. Les consommateurs peuvent choisir de commencer à lire les données à partir d'un décalage spécifique ou de commencer à lire les données à partir du dernier décalage.
Scénarios d'application
Kafka peut être utilisé dans une variété de scénarios d'application, tels que :
Exemples de code
Ce qui suit est un exemple de producteur Kafka écrit en Java :
import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerConfig; import org.apache.kafka.clients.producer.ProducerRecord; import java.util.Properties; public class KafkaProducerExample { public static void main(String[] args) { // Create a Kafka producer Properties properties = new Properties(); properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer"); properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer"); KafkaProducer<String, String> producer = new KafkaProducer<>(properties); // Create a Kafka record ProducerRecord<String, String> record = new ProducerRecord<>("my-topic", "hello, world"); // Send the record to Kafka producer.send(record); // Close the producer producer.close(); } }
Ce qui suit est un exemple de consommateur Kafka écrit en Java :
import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.KafkaConsumer; import java.util.Collections; import java.util.Properties; public class KafkaConsumerExample { public static void main(String[] args) { // Create a Kafka consumer Properties properties = new Properties(); properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); properties.put(ConsumerConfig.GROUP_ID_CONFIG, "my-group"); KafkaConsumer<String, String> consumer = new KafkaConsumer<>(properties); // Subscribe to a topic consumer.subscribe(Collections.singletonList("my-topic")); // Poll for new records while (true) { ConsumerRecords<String, String> records = consumer.poll(100); for (ConsumerRecord<String, String> record : records) { System.out.println(record.key() + ": " + record.value()); } } // Close the consumer consumer.close(); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!