Qu'est-ce qu'Apache Kafka ?
Apache Kafka est une plateforme de messaging distribuée open source, de type publish-subscribe, spécialement conçue pour le data streaming, le data pipeline et le replay de flux de données, en vue d'opérations rapides et évolutives.
Kafka est basé sur un broker qui fonctionne en maintenant des flux de données sous forme d'enregistrements dans un cluster de serveurs. Les serveurs Kafka peuvent être distribués dans plusieurs data centers et assurer la persistance des données en stockant par stream d'enregistrements (messages) sur plusieurs instances de serveurs. Un sujet stocke les enregistrements ou les messages sous la forme d'une série de tuples, une séquence d'objets Python immuables, qui se composent d'une clé, d'une valeur et d'un horodatage.
Cas d'usage d'Apache Kafka
Apache Kafka est l'une des solutions de messaging open source à la croissance la plus rapide sur le marché. Cela est principalement dû au modèle de conception architectural qui fournit un excellent mécanisme de logging pour les systèmes distribués.
Conçu spécialement pour le streaming de logs en temps réel, Apache Kafka est parfaitement adapté aux applications qui nécessitent :
- un échange fiable de données entre des composants disparates,
- la capacité de partitionner les charges de travail en fonction de l'évolution des besoins des applications,
- un streaming temps réel pour le traitement des données,
- une prise en charge native pour la relecture des données/messages.
Concepts d'Apache Kafka
Topics : un topic est un concept universel dans le messaging de type publish-subscribe. Dans les solutions de messaging Apache Kafka et autres, un topic est une abstraction adressable utilisée pour montrer un intérêt pour un flux de données fourni (série d'enregistrements/messages). Un topic peut être publié et faire l'objet d'un abonnement. C'est une couche d'abstraction utilisée par l'application pour montrer son intérêt pour un flux de données fourni.
Partitions : dans Apache Kafka, les topics peuvent être subdivisés en une série de files d'attente appelées partitions. Ces partitions sont continuellement ajoutées pour former un log des commit séquentiel. Dans le système Kafka, chaque enregistrement/message se voit attribuer un identificateur séquentiel appelé offset qui est utilisé pour identifier le message ou l'enregistrement dans la partition donnée.
Persistance : Apache Kafka fonctionne en maintenant un cluster de serveurs qui font durablement persister les enregistrements/messages à mesure qu'ils sont publiés. Le cluster Kafka utilise un délai de rétention configurable permettant de déterminer la durée de persistance d'un enregistrement donné, indépendamment de sa consommation. Tant que l'enregistrement/message est dans le délai de rétention, il est disponible pour la consommation. Une fois que l'enregistrement/message dépasse ce délai de rétention, l'enregistrement/message est supprimé et l'espace est libéré.
Topic/Partition Scaling : Apache Kafka fonctionnant comme un cluster de serveurs, les topics/partitions sont mis à l'échelle en répartissant la charge sur chaque serveur d'un topic/partition donné. Cette répartition de la charge permet à chaque serveur du cluster Kafka de gérer la distribution et la persistance des enregistrements/messages sur un topic/partition donné. Alors que les serveurs individuels gèrent toute la distribution et la persistance, tous les serveurs répliquent les données, ce qui assure une tolérance aux pannes et une haute disponibilité en cas de défaillance d'un serveur. Les partitions sont segmentées entre les serveurs, l'un d'entre eux étant élu la partition principale et tous les autres serveurs jouant le rôle de partitions secondaires. Le serveur qui est la partition principale s'occupe de la distribution et de la persistance (lectures/écritures) des données et les partitions secondaires fournissent des services de réplication pour la tolérance aux pannes.
Producteurs : dans Apache Kafka, le concept de producteur n'est pas différent de celui de la plupart des solutions de messaging. Un producteur de données (enregistrements/messages) définit le topic (flux de données) sur lequel un enregistrement/message donné doit être publié. Puisque les partitions sont utilisées pour fournir une extensibilité supplémentaire, un producteur peut également définir sur quelle partition un enregistrement/message donné est publié. Les producteurs ne sont pas obligés de définir une partition donnée et, en ne définissant pas de partition, il est possible de réaliser un équilibrage de charge de type round-robin entre les partitions de sujets.
Consommateurs : dans Kafka, comme dans la plupart des systèmes de messaging, les consommateurs sont les entités qui traitent les enregistrements/messages. Les consommateurs peuvent être configurés pour travailler indépendamment sur des charges de travail individuelles ou en coopération avec d'autres consommateurs sur une charge de travail donnée (équilibrage de charge). Les consommateurs gèrent la façon dont ils traitent une charge de travail en fonction du nom de leur groupe de consommateurs. L'utilisation d'un nom de groupe de consommateurs permet de distribuer les consommateurs au sein d'un seul processus, entre plusieurs processus et même entre plusieurs systèmes. Grâce aux noms de groupes de consommateurs, les consommateurs peuvent soit équilibrer la charge (plusieurs consommateurs ayant le même nom de groupe de consommateurs) en consommant des enregistrements/messages dans le groupe des consommateurs, soit traiter chaque enregistrement/message de manière unique (plusieurs consommateurs ayant des noms de groupes de consommateurs uniques), chaque consommateur abonné à un sujet/une partition recevant le message à traiter.

Avantages métiers d'Apache Kafka
Apache Kafka présente des avantages importants en raison des objectifs de conception qu'il a été conçu pour satisfaire. Apache Kafka a été et est conçu avec trois exigences principales à l'esprit :
- Fournir un modèle de messagerie de type publication/abonnement pour la distribution et la consommation des données.
- Permettre le stockage à long terme de données qui peuvent être consultées et relues au fil du temps.
- Prendre en charge la capacité d'accéder aux données en temps réel afin de fournir un traitement de flux en temps réel.
C'est là qu'Apache Kafka se distingue vraiment. Contrairement à certains systèmes de messagerie, il n'offre pas toutes les fonctionnalités de transaction ou différents modèles de distribution. Il se concentre sur la distribution des données par un modèle de publication/abonnement qui prend en charge le traitement en continu.
Deuxièmement, étant donné qu'il est conçu dès le départ pour fournir un stockage de données à long terme et une relecture des données, Apache Kafka a la capacité d'aborder la persistance des données, la tolérance aux pannes et la relecture de manière unique. Ceci est particulièrement visible dans la façon dont Apache Kafka gère la persistance de la réplication des données dans le cluster, l'évolutivité en permettant le partage des données entre les partitions pour augmenter les volumes de données et la charge, et l'accès aux données en utilisant des sujets/partitions, des offsets de données et des noms de groupes de consommateurs.
Enfin, Apache Kafka ayant été conçu à l'origine pour servir de couche de communication pour le traitement des journaux en temps réel, il se prête naturellement aux applications de traitement des flux en temps réel. Apache Kafka est donc parfaitement adapté aux applications qui exploitent une infrastructure de communication capable de distribuer de gros volumes de données en temps réel.
Fonctionnalité de messagerie et de streaming en continu : Lorsqu'on traite de grands volumes de données, la messagerie peut offrir un avantage significatif en matière de communication et d'évolutivité par rapport aux modèles de communication traditionnels. En combinant les fonctionnalités de messagerie et de streaming, Apache Kafka offre une capacité unique de publication, d'abonnement, de stockage et de traitement des enregistrements en temps réel.
Rétention temporelle des données pour la relecture des données : la capacité d'Apache Kafka à stocker nativement les données de manière persistante sur le disque dans un cluster permet une approche simple à la tolérance aux pannes. Associée à sa capacité de rappeler les données stockées en fonction de périodes de rétention temporelles et d'accéder aux données en fonction d'offsets séquentiels, Apache Kafka offre une approche robuste du stockage et de la récupération des données dans une configuration en cluster.
Approche fondamentale du traitement des flux : pouvoir déplacer les données rapidement et efficacement est la clé de l'interconnectivité. Apache Kafka fournit la base pour déplacer les données de manière transparente sous forme d'enregistrements, de messages ou de flux. Avant de pouvoir inspecter, transformer et exploiter les données, il faut pouvoir les déplacer d'un endroit à l'autre en temps réel, et Apache Kafka fournit une approche native pour déplacer et stocker les données en temps réel.
Prise en charge de l'intégration native : une solution unique n'est jamais une bonne approche, et Apache Kafka offre la possibilité de s'étendre et de se développer en fournissant des points d'intégration natifs à l'aide de l'API de connexion. Grâce au Connector API d'Apache Kafka, les applications peuvent s'intégrer à des solutions tierces, à d'autres systèmes de messagerie et à des applications existantes, soit par le biais de connecteurs préétablis ou d'outils open source, soit par la création délibérée de connecteurs en fonction des besoins de l'application.
Mettre en application Apache Kafka
Apache Kafka peut être utilisé pour de nombreux types d'applications afin d'alimenter une architecture pilotée par les événements, de la distribution de messages en temps réel à la diffusion d'événements en continu. Prenons l'exemple d'une société de fabrication qui évolue vers une architecture pilotée par les événements afin de fournir plus d'automatisation, plus de suivi et une livraison plus rapide des produits et services. Si de nombreux composants sont nécessaires pour fournir l'architecture pilotée par les événements de bout en bout, la communication est à la base de la manière dont les événements sont diffusés et traités. Apache Kafka est la solution idéale pour permettre la distribution et la diffusion de données dans un mode distribué léger. Avec Apache Kafka, les enregistrements/messages de processus peuvent être transmis en continu à une ou plusieurs applications, ce qui entraîne des charges de travail supplémentaires à mesure que le produit progresse dans le processus de fabrication. De la même manière, des notifications peuvent être générées et suivies au fur et à mesure que le produit est traité sur la chaîne de fabrication ; les anomalies peuvent être détectées et traitées en temps réel, alors que le processus manuel ne détectait les exceptions qu'en fin de processus. Enfin, il est possible d'améliorer l'expérience du consommateur en fournissant un aperçu détaillé de l'état d'avancement du produit dans le processus de fabrication et de la manière dont le produit est assemblé, testé et livré.
Au cœur de toutes ces améliorations se trouve Apache Kafka, qui fournit le système nerveux pour la distribution et la communication des données, en plus d'offrir un meilleur délai de commercialisation et une réduction des coûts.