Maison Java javaDidacticiel Compréhension approfondie du mécanisme de mise en œuvre sous-jacent de la file d'attente de messages Kafka

Compréhension approfondie du mécanisme de mise en œuvre sous-jacent de la file d'attente de messages Kafka

Feb 01, 2024 am 08:15 AM
消息队列 kafka 实现原理 java应用程序

Compréhension approfondie du mécanisme de mise en œuvre sous-jacent de la file dattente 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 :

  • Collecte de journaux : Kafka peut être utilisé pour collecter et stocker des données de journal provenant de différents systèmes.
  • Analyse des données : Kafka peut être utilisé pour collecter et stocker des données provenant de différents systèmes, puis analyser les données.
  • Traitement des flux : Kafka peut être utilisé pour traiter des flux de données provenant de différents systèmes.
  • Architecture basée sur les événements : Kafka peut être utilisé pour implémenter une architecture basée sur les événements.

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();
    }
}
Copier après la connexion

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();
    }
}
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Recommandations de l'émulateur Java : ces cinq recommandations sont faciles à utiliser et pratiques ! Recommandations de l'émulateur Java : ces cinq recommandations sont faciles à utiliser et pratiques ! Feb 22, 2024 pm 08:42 PM

Un émulateur Java est un logiciel qui peut exécuter des applications Java sur un ordinateur ou un appareil. Il peut simuler la machine virtuelle Java et exécuter le bytecode Java, permettant aux utilisateurs d'exécuter des programmes Java sur différentes plates-formes. Les simulateurs Java sont largement utilisés dans le développement, l'apprentissage et les tests de logiciels. Cet article présentera cinq émulateurs Java utiles et pratiques qui peuvent répondre aux besoins de différents utilisateurs et aider les utilisateurs à développer et à exécuter des programmes Java plus efficacement. Le premier émulateur était Eclipse. Écl

Comment installer Java sur Debian 12 : un guide étape par étape Comment installer Java sur Debian 12 : un guide étape par étape Mar 20, 2024 pm 03:40 PM

Java est un langage de programmation puissant qui permet aux utilisateurs de créer un large éventail d'applications, telles que la création de jeux, la création d'applications Web et la conception de systèmes embarqués. Debian12 est un nouveau système d'exploitation puissant basé sur Linux qui fournit une base stable et fiable pour le développement des applications Java. Avec les systèmes Java et Debian, vous pouvez ouvrir un monde de possibilités et d'innovations qui peuvent certainement beaucoup aider les gens. Cela n'est possible que si Java est installé sur votre système Debian. Dans ce guide, vous apprendrez : Comment installer Java sur Debian12 Comment installer Java sur Debian12 Comment supprimer Java de Debian12

Framework de tests unitaires JUnit : avantages et limites de son utilisation Framework de tests unitaires JUnit : avantages et limites de son utilisation Apr 18, 2024 pm 09:18 PM

Le framework de tests unitaires JUnit est un outil largement utilisé dont les principaux avantages incluent des tests automatisés, un retour rapide, une qualité de code améliorée et une portabilité. Mais il présente également des limites, notamment une portée limitée, des coûts de maintenance, des dépendances, une consommation de mémoire et un manque de prise en charge d'intégration continue. Pour les tests unitaires d'applications Java, JUnit est un framework puissant qui offre de nombreux avantages, mais ses limites doivent être prises en compte lors de son utilisation.

Guide d'utilisation de l'API Oracle : exploration de la technologie d'interface de données Guide d'utilisation de l'API Oracle : exploration de la technologie d'interface de données Mar 07, 2024 am 11:12 AM

Oracle est un fournisseur de systèmes de gestion de bases de données de renommée mondiale et son API (Application Programming Interface) est un outil puissant qui aide les développeurs à interagir et à s'intégrer facilement aux bases de données Oracle. Dans cet article, nous approfondirons le guide d'utilisation de l'API Oracle, montrerons aux lecteurs comment utiliser la technologie d'interface de données pendant le processus de développement et fournirons des exemples de code spécifiques. 1.Oracle

Comment installer Apache Kafka sur Rocky Linux ? Comment installer Apache Kafka sur Rocky Linux ? Mar 01, 2024 pm 10:37 PM

Pour installer ApacheKafka sur RockyLinux, vous pouvez suivre les étapes suivantes : Mettre à jour le système : Tout d'abord, assurez-vous que votre système RockyLinux est à jour, exécutez la commande suivante pour mettre à jour les packages système : sudoyumupdate Installer Java : ApacheKafka dépend de Java, vous vous devez d'abord installer JavaDevelopmentKit (JDK). OpenJDK peut être installé via la commande suivante : sudoyuminstalljava-1.8.0-openjdk-devel Télécharger et décompresser : Visitez le site officiel d'ApacheKafka () pour télécharger le dernier package binaire. Choisissez une version stable

Connectez Java à la base de données MySQL Connectez Java à la base de données MySQL Feb 22, 2024 pm 12:58 PM

Comment se connecter à la base de données MySQL en utilisant Java ? Quand j'essaye, j'obtiens java.sql.sqlexception:nosuitabledriverfoundforjdbc:mysql://database/tableatjava.sql.drivermanager.getconnection(drivermanager.java:689)atjava.sql.drivermanager.getconnection(drivermanager.java:247) ou

Premiers pas avec JMX : découvrez les bases de la surveillance et de la gestion Java Premiers pas avec JMX : découvrez les bases de la surveillance et de la gestion Java Feb 20, 2024 pm 09:06 PM

Qu’est-ce que JMX ? JMX (Java Monitoring and Management) est un framework standard qui vous permet de surveiller et de gérer les applications Java et leurs ressources. Il fournit une API unifiée pour accéder et manipuler les métadonnées et les propriétés de performances d'une application. MBean : Management BeanMBean (Management Bean) est le concept central de JMX. Il encapsule une partie de l'application qui peut être surveillée et gérée. Les MBeans ont des propriétés (lisibles ou inscriptibles) et des opérations (méthodes) qui sont utilisées pour accéder à l'état de l'application et effectuer des opérations. MXBean : Extension de gestion BeanMXBean est une extension de MBean, qui fournit des fonctions de surveillance et de gestion plus avancées. Les MXBeans sont définis par la spécification JMX et ont des valeurs prédéfinies

Le secret de l'intégration Java JNDI et Spring : révéler la coopération transparente de Java JNDI et Spring Framework Le secret de l'intégration Java JNDI et Spring : révéler la coopération transparente de Java JNDI et Spring Framework Feb 25, 2024 pm 01:10 PM

Avantages de l'intégration de JavaJNDI avec Spring L'intégration de JavaJNDI avec le framework Spring présente de nombreux avantages, notamment : Simplification de l'utilisation de JNDI : Spring fournit une couche d'abstraction qui simplifie l'utilisation de JNDI sans écrire de code JNDI complexe. Gestion centralisée des ressources JNDI : Spring peut gérer de manière centralisée les ressources JNDI pour faciliter la recherche et la gestion. Prise en charge de plusieurs implémentations JNDI : Spring prend en charge plusieurs implémentations JNDI, notamment JNDI, JNP, RMI, etc. Intégrez de manière transparente le framework Spring : Spring est très étroitement intégré à JNDI et s'intègre de manière transparente au framework Spring. Comment intégrer JavaJNDI au framework Spring pour intégrer Ja

See all articles