Analyse des principes fondamentaux d'implémentation de la file d'attente de messages Kafka
1. Sujets et partitions
Les données dans Kafka sont stockées dans des sujets, et chaque sujet peut avoir plusieurs partitions. Une partition est l'unité de stockage physique des données dans Kafka. Chaque partition est un fichier journal indépendant, ordonné et immuable. Le partitionnement est la clé du débit élevé et de la haute disponibilité de Kafka, car les données peuvent être écrites et lues en parallèle sur différentes partitions.
2. Producteur de message
Le producteur de message (producteur) est le client qui envoie des données au sujet Kafka. Un producteur peut être n'importe quelle application à condition qu'elle implémente l'API de producteur de Kafka. L'API du producteur permet aux producteurs d'envoyer des données à des sujets et des partitions spécifiques. Si le producteur ne spécifie pas de partition, Kafka en choisira automatiquement une.
3. Consommateur de messages
Un consommateur de messages (consommateur) est un client qui lit les données d'un sujet Kafka. Un consommateur peut être n'importe quelle application à condition qu'elle implémente l'API consommateur de Kafka. L'API grand public permet aux consommateurs de s'abonner à des sujets et des partitions spécifiques. Lorsqu'un consommateur s'abonne à un sujet, il commence à lire les données depuis le début du sujet. Les consommateurs peuvent lire les données en parallèle car chaque consommateur peut lire les données d'une partition différente.
4. Stockage des messages
Kafka stocke les données sur disque. Chaque partition est un fichier journal indépendant et le fichier journal est composé de plusieurs segments. La taille de chaque segment est de 1 Go. Lorsqu'un segment est plein, Kafka crée un nouveau segment. Kafka compresse périodiquement les anciens segments pour économiser de l'espace de stockage.
5. Réplication des messages
Kafka garantit la fiabilité des données grâce à la réplication. Les données de chaque partition seront copiées sur plusieurs répliques. Les répliques peuvent se trouver sur différents serveurs. Lorsqu'une réplique échoue, d'autres répliques peuvent continuer à fournir des services.
6. Soumission du message
Lorsque le consommateur lit les données de Kafka, il doit soumettre (valider) sa progression de consommation à Kafka. L'opération de validation stocke la progression de la consommation du consommateur dans les métadonnées de Kafka. Les métadonnées sont stockées dans ZooKeeper. L'opération de validation garantit que les consommateurs ne consommeront pas de données à plusieurs reprises.
7. Décalage du message
Chaque message a un décalage. Un décalage est un identifiant unique qui identifie l'emplacement d'un message dans une partition. La compensation peut être utilisée pour suivre la progression de la consommation du consommateur.
8. Groupe de consommateurs
Un groupe de consommateurs est un regroupement logique de consommateurs. Les consommateurs d'un groupe de consommateurs peuvent consommer des données du même sujet en parallèle. Lorsque les consommateurs d’un groupe de consommateurs consomment des données, les consommateurs des autres groupes de consommateurs ne consomment pas ces données.
9. Équilibrage de charge
Kafka utilise l'équilibrage de charge pour garantir que les données sont réparties uniformément sur les différentes partitions. L'équilibreur de charge est responsable de la distribution des données sur différentes partitions. Les équilibreurs de charge peuvent distribuer des données en fonction de différentes stratégies, telles que le hachage à tour de rôle, aléatoire ou cohérent.
10. Exemple de code
Ce qui suit est un exemple de code Java simple qui montre comment utiliser l'API producteur et consommateur Kafka :
// 创建生产者 Properties producerProps = new Properties(); producerProps.put("bootstrap.servers", "localhost:9092"); producerProps.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); producerProps.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); KafkaProducer<String, String> producer = new KafkaProducer<>(producerProps); // 创建消费者 Properties consumerProps = new Properties(); consumerProps.put("bootstrap.servers", "localhost:9092"); consumerProps.put("group.id", "my-group"); consumerProps.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); consumerProps.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer<String, String> consumer = new KafkaConsumer<>(consumerProps); // 订阅主题 consumer.subscribe(Collections.singletonList("my-topic")); // 发送消息 producer.send(new ProducerRecord<String, String>("my-topic", "hello, world")); // 接收消息 while (true) { ConsumerRecords<String, String> records = consumer.poll(100); for (ConsumerRecord<String, String> record : records) { System.out.println(record.key() + ": " + record.value()); } }
Résumé
Kafka est un système de file d'attente de messages distribué et évolutif. Il peut être utilisé pour créer diverses applications, telles que la collecte de journaux, l'analyse de données, le traitement de flux en temps réel, etc. Les principes de base de mise en œuvre de Kafka incluent les sujets, les partitions, les producteurs de messages, les consommateurs de messages, le stockage des messages, la réplication des messages, la soumission des messages, les décalages de messages, les groupes de consommateurs et l'équilibrage de charge, etc.
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!