Dans ⁢le vaste univers de la ⁤messagerie ⁤informatique, deux géants se distinguent par leur approche unique de la‍ communication entre systèmes : Apache Kafka et Java Message Service (JMS). ‍Bien que tous deux servent⁤ le noble ⁣objectif de faciliter le dialogue entre applications, ils le font selon ‌des philosophies et des​ architectures qui leur sont propres. Cet article se propose de lever le voile sur les différences clés qui séparent Kafka, ​le titan du streaming de données en​ temps réel,‍ de JMS, le vétéran‌ éprouvé ‍de la messagerie orientée messages. À travers⁢ une exploration détaillée‍ de leurs ​caractéristiques, nous allons décortiquer⁤ les mécanismes qui font‌ de chacun de ces ​systèmes une⁤ solution unique, et souvent complémentaire, dans l’orchestre de la communication inter-applicative.‌ Embarquez avec nous dans cette analyse technique, où nous mettrons en lumière les contrastes et‌ les points de convergence entre ⁢Kafka⁢ et JMS, deux piliers ‌de⁣ l’échange de⁢ messages dans le monde de ​l’informatique d’entreprise.

Inhaltsverzeichnis

Kafka ‍contre⁣ JMS : le duel des systèmes de messagerie

Lorsqu’on évoque‍ les systèmes de messagerie⁤ dans le monde ⁢de l’informatique, deux noms ⁤se​ détachent souvent : Apache Kafka et ​Java​ Message Service ⁤(JMS). ⁣Ces deux technologies, ⁤bien que servant à des​ fins similaires, présentent des caractéristiques‌ distinctes qui peuvent influencer ⁣le choix d’une architecture ⁢de messagerie.

Apache‌ Kafka, ​conçu à ⁤l’origine⁢ par LinkedIn, est un ‍système de messagerie distribué orienté‌ flux qui excelle dans le traitement de volumes‌ massifs de données en temps​ réel. ⁤Kafka​ est souvent choisi pour sa haute performance,‍ sa scalabilité ‍et sa capacité⁤ à gérer⁤ des flux de données de manière fiable. Voici quelques points ​clés qui le distinguent :

  • Haute performance ⁢ : Kafka est optimisé pour⁣ le débit élevé de messages et peut traiter des centaines de milliers de messages par seconde.
  • Scalabilité : Kafka ⁣peut être ⁣facilement étendu en ajoutant plus de ​nœuds au cluster sans interruption de service.
  • Durabilité et fiabilité : Les messages sont persistés sur ​le disque et répliqués au ‌sein du cluster pour prévenir ‌la perte de données.
  • Pub/Sub et⁢ modèle de consommation de groupe : ⁤Kafka permet à ⁢plusieurs consommateurs ⁤de ⁢lire des messages dans des topics ⁤et de maintenir⁢ leur position (offset) dans les logs.

D’un autre côté, Java​ Message‍ Service (JMS) ​est une spécification API qui permet la ⁢création, l’envoi, la ⁣réception ‌et la lecture‍ de messages. Elle est conçue pour être indépendante ​du fournisseur, permettant ainsi une plus⁤ grande‍ flexibilité ⁣dans le choix ⁢de l’implémentation. JMS ‌est souvent privilégié pour​ sa simplicité d’utilisation⁣ et sa compatibilité avec les applications d’entreprise. Ses caractéristiques principales ⁤incluent‌ :

  • Indépendance du fournisseur : ​JMS définit une⁣ API standardisée qui peut ⁢être implémentée par de nombreux fournisseurs.
  • Modèles de communication : JMS supporte à la‍ fois le modèle point-à-point (Queue) et ⁢le⁣ modèle publish-subscribe (Topic).
  • Transactions : JMS supporte les transactions pour assurer‌ que ⁤les messages ‌sont correctement reçus⁣ et traités.
  • Intégration avec les conteneurs EJB/JEE ​: JMS s’intègre bien ⁤avec les conteneurs⁤ d’entreprise‌ Java, facilitant la gestion des messages dans les applications⁣ d’entreprise.
CaractéristiqueKafkaJMS
PerformanceTrès élevéeModérée à élevée
ScalabilitéHorizontaleDépend ⁢du fournisseur
FiabilitéHaute​ (réplication)Variable ⁢(transactions)
Modèle de consommationPub/Sub, Groupes de ⁣consommateursPoint-à-point, Pub/Sub

En somme, le choix entre Kafka ​et JMS⁣ dépendra des besoins spécifiques en matière de traitement des messages, ​de la‍ performance requise, de la scalabilité, de la fiabilité et de l’intégration avec les systèmes existants. Tandis ‌que Kafka est souvent privilégié ⁢pour les architectures ⁤orientées événements et le traitement​ en ⁢temps réel à grande échelle, JMS ⁣trouve ⁣sa place dans les applications‍ d’entreprise nécessitant ‍une ​intégration étroite avec les standards Java et une gestion transactionnelle robuste.

Comprendre les​ architectures fondamentales

Avant de plonger dans les différences clés ⁣entre⁢ Kafka⁣ et JMS⁣ (Java ​Message Service), il est essentiel de saisir⁤ les concepts‍ de base qui sous-tendent ces deux‌ systèmes ‌de ‍messagerie. D’une part,‍ Kafka⁤ est conçu⁢ comme un système de journalisation distribué capable ​de gérer de hauts volumes de ‌données ⁣et⁤ de⁢ supporter⁤ des opérations de lecture et d’écriture à ​haute ⁣performance. D’autre part, JMS est une spécification ⁢pour les systèmes ⁣de messagerie qui ​permet⁤ aux applications distribuées d’envoyer des messages, ​favorisant la découplabilité et⁤ la fiabilité.

Les‌ architectures de Kafka⁣ et JMS diffèrent significativement‍ en termes de modèle de‌ traitement​ des messages et de ​scalabilité.⁤ Kafka utilise‌ un modèle ⁢de publication-abonnement où les messages sont stockés dans des topics, et chaque message est consommé ​par ‍les abonnés sans être supprimé du topic. Cela permet à plusieurs consommateurs de ‌lire le même message indépendamment. ⁣En ‍contraste, JMS supporte à⁢ la fois⁤ les modèles ⁣point-à-point et publication-abonnement, mais dans le modèle point-à-point, une ⁢fois qu’un message est consommé, il est retiré de la ⁣queue, ce qui signifie ‌qu’il ​ne ‌peut être consommé qu’une seule‍ fois.

CaractéristiqueKafkaJMS
Modèle de messageriePublication-abonnementPoint-à-point, Publication-abonnement
ScalabilitéHaute, avec partitionnementMoyenne,‍ dépend de l’implémentation
Persistence des messagesOui,⁢ avec rétention configurableOui, ​mais dépend de la configuration⁢ de⁢ la queue
Consommation des messagesMultiple ⁣consommateurs par messageUn seul consommateur par message‍ (point-à-point)
  • Performance : Kafka est optimisé pour le traitement de ​flux de données en temps ⁢réel et peut gérer des volumes de données plus⁣ importants et ‌des débits‌ plus élevés que JMS.
  • Fiabilité :​ JMS​ offre des fonctionnalités avancées de ‍transaction et de récupération de messages, ce ⁤qui peut être crucial pour‍ les applications nécessitant une garantie de livraison des messages.
  • Flexibilité : Kafka permet ⁣une plus grande flexibilité dans le traitement des données ​grâce ​à⁢ son ⁤système ‍de ⁤partitionnement, qui​ facilite ​la répartition de la charge et⁤ l’extension horizontale.

Performance⁢ et débit :⁤ une comparaison technique

Lorsqu’il s’agit de comparer ‌Kafka et JMS en ‌termes de performance et de débit, il est essentiel de comprendre que ces deux ⁤technologies ⁤ont été conçues avec des objectifs différents ‌en tête. Kafka, avec ⁣son architecture de journal distribué, est optimisé pour gérer de gros⁤ volumes de données et offre un débit élevé, ‍ce‍ qui le⁣ rend idéal pour les scénarios de ‌traitement de flux de⁢ données et d’événements en temps réel. D’autre part, JMS (Java Message Service), en tant que spécification pour les systèmes de messagerie, se concentre davantage sur la ‌garantie de livraison et la fiabilité des‍ messages, ce qui peut ‌influencer son débit global.

  • Kafka ‌:‌ conçu‍ pour le ⁣débit élevé avec une latence ⁣faible, même avec ⁣des téraoctets ⁢de messages ‌stockés.
  • JMS : privilégie la ‍fiabilité et la ⁤livraison ‌garantie, ce ⁣qui peut réduire le débit en ⁣comparaison.

En termes de chiffres, Kafka peut traiter des millions‍ de messages par seconde, tandis⁣ que JMS, en fonction de l’implémentation et de la configuration, peut être ⁢plus limité. Le tableau suivant illustre une comparaison simplifiée des capacités ⁢de performance de Kafka ⁢et JMS :

CritèreKafkaJMS
DébitTrès élevéMoyen à élevé (dépend‍ de l’implémentation)
LatenceFaibleVariable
ScalabilitéHorizontaleLimitée par l’architecture
FiabilitéHaute (avec réplication)Très haute (avec des mécanismes de persistence et d’acknowledgement)

Il est important de noter⁢ que ces chiffres sont indicatifs​ et ‍peuvent varier ‌en fonction de nombreux facteurs, tels que la configuration du système, le matériel utilisé et la nature⁣ des messages​ traités. Néanmoins,⁣ cette​ comparaison ⁣technique met en⁤ lumière les​ différences fondamentales entre Kafka et JMS en matière de performance et de débit.

Fiabilité et durabilité des messages : quel système choisir

Lorsqu’il ⁣s’agit de choisir une technologie de⁣ messagerie pour ⁣garantir ⁣la fiabilité et la durabilité des ‌messages, deux ⁤acteurs majeurs⁢ se⁤ distinguent ​: Apache Kafka et Java Message Service (JMS). Chacun de ces​ systèmes offre ​des caractéristiques distinctes qui peuvent influencer ⁢votre ⁤décision en fonction de vos besoins spécifiques.

Apache Kafka est conçu‍ pour gérer ⁣de hauts volumes de données et permet une transmission de messages à très grande échelle. Il se distingue ‍par sa⁣ capacité à traiter ‍des flux de données en temps réel, ce qui en ‍fait un choix idéal pour les⁣ applications nécessitant ⁤une haute performance et une faible latence. Voici quelques points clés :

  • Haute performance : Kafka est optimisé⁢ pour le débit élevé et la faible latence,​ même ⁤avec ⁤des volumes ⁣de données ‌massifs.
  • Durabilité⁣ : Il utilise ⁣un système de journalisation‌ qui garantit la sécurité des ‍données⁤ même en cas de panne.
  • Scalabilité : Kafka peut être facilement étendu en ajoutant plus de nœuds⁢ au cluster.

Java Message Service (JMS), d’autre part, ‍est une spécification API qui permet la création,⁣ l’envoi, la réception et la ⁣lecture de messages. Il est souvent ‌utilisé dans les applications‌ d’entreprise pour intégrer différents systèmes et assurer une communication fiable​ entre‌ eux. ⁣Les ‌points forts de JMS incluent :

  • Flexibilité : JMS supporte deux modèles de messagerie – point-à-point et publish/subscribe.
  • Fiabilité : Il ‍offre des ​fonctionnalités telles que la ‍confirmation de réception et la redélivrance ‍automatique ​des messages.
  • Intégration : JMS s’intègre bien avec les systèmes d’entreprise‍ existants, en particulier ceux qui sont basés sur la technologie⁤ Java.
CaractéristiqueKafkaJMS
Modèle⁢ de messageriePublish/SubscribePoint-à-point, Publish/Subscribe
PerformanceTrès élevéeÉlevée
ScalabilitéHorizontaleVariable selon l’implémentation
FiabilitéJournalisation des messagesConfirmation de réception, redélivrance

En conclusion, le choix entre Kafka et JMS dépendra ​de⁣ la nature de votre projet. Si⁣ vous recherchez⁢ une solution capable de gérer des volumes de⁣ données importants avec une faible latence, Kafka pourrait être le système de ​prédilection. En⁣ revanche, si ​vous⁣ avez besoin ‍d’une intégration étroite avec ​des applications Java et ⁢une ​flexibilité dans les modèles de messagerie, JMS ⁢pourrait⁤ être la solution ‍idéale.

Gestion de la scalabilité : Kafka⁢ ou JMS pour votre entreprise

Lorsqu’il s’agit de choisir une solution de messagerie pour gérer ‌la ⁢scalabilité de votre entreprise, deux options majeures se présentent : Apache Kafka et Java Message Service (JMS). Chaque technologie possède ses ​propres caractéristiques qui peuvent influencer votre ‍décision ​en fonction de vos besoins spécifiques.

Apache Kafka est souvent privilégié pour sa haute performance et sa capacité⁣ à gérer de gros volumes de données en‌ temps réel. ‍Il⁢ est conçu pour être distribué, ⁣partitionné et répliqué, ce qui le rend particulièrement adapté aux environnements nécessitant une forte tolérance‍ aux pannes et ⁢une ⁢scalabilité‌ horizontale.​ Voici quelques points clés :

  • Haute débit et ⁣faible latence, ‌même avec des volumes de données massifs
  • Capacité à ⁤gérer des flux de données en continu ⁢(streaming)
  • Scalabilité horizontale efficace grâce à son architecture distribuée

Java Message Service (JMS), d’autre⁣ part, est une spécification API qui permet la communication entre différents composants d’une⁤ application distribuée ou entre différentes ‍applications. JMS​ est souvent choisi‌ pour ⁢sa flexibilité et sa compatibilité avec ⁢les systèmes d’entreprise existants. Les points​ suivants sont à considérer :

  • Intégration aisée avec les ⁣systèmes⁤ d’entreprise et les ​applications Java EE
  • Supporte différents modèles de communication, y ⁢compris point-à-point et ⁢publish/subscribe
  • Facilité de transaction et de récupération de message
CaractéristiqueKafkaJMS
Modèle de donnéesFlux continuMessages individuels
ScalabilitéHorizontaleVerticale
PerformanceÉlevée avec gros volumesVarie‍ selon l’implémentation
FiabilitéRéplication des donnéesDépend du​ fournisseur JMS
TransactionsLimitéesComplètes

En résumé, Kafka est souvent le choix de prédilection pour les applications nécessitant une grande capacité de traitement et une scalabilité horizontale, tandis que JMS est préféré pour sa flexibilité et son intégration avec les systèmes d’entreprise.‌ L’évaluation de vos ‍besoins ‌en⁤ termes de volume de données, de ‍modèle de communication et de gestion des​ transactions​ vous aidera à déterminer la solution la plus adaptée à votre entreprise.

Intégration‍ et écosystème⁣ :‍ les ⁤enjeux de compatibilité

Lorsqu’on évalue Kafka et JMS ⁢en termes d’intégration et d’écosystème, il⁤ est crucial de ⁢comprendre⁢ comment chaque technologie s’articule avec les ‌systèmes existants et les protocoles ‍de⁣ communication. Kafka, conçu⁢ pour la haute performance et la scalabilité,⁤ s’intègre naturellement dans les environnements qui nécessitent un traitement rapide et en grand volume de messages. Il est souvent privilégié​ dans les architectures⁢ orientées événements et les systèmes qui ​requièrent une durabilité des‌ données grâce à son mécanisme de journalisation distribuée.

En revanche, JMS (Java Message ⁣Service) est souvent choisi pour‌ sa capacité à s’intégrer dans les environnements Java Enterprise, offrant ‍une compatibilité avec ‍une multitude de⁢ fournisseurs de middleware. ‍JMS excelle ⁤dans les scénarios qui demandent ​une communication fiable‌ et point-à-point​ ou pub/sub, avec des ⁢fonctionnalités telles que la sélection de ​messages et la garantie de livraison. Voici une comparaison simplifiée sous forme de tableau :

CritèreKafkaJMS
Modèle de communicationPub/Sub, StreamingPoint-à-point, ⁤Pub/Sub
ScalabilitéÉlevéeMoyenne
Intégration avec l’écosystème JavaCompatible via des connecteursNative
FiabilitéHaute (avec réplication)Haute (avec fonctionnalités ⁢JMS)
PerformanceTrès élevéeVariable selon le ‍fournisseur

Il⁢ est essentiel de ‌noter que ⁣l’intégration ne se limite pas ⁤à la⁤ compatibilité technique,⁣ mais englobe également la ‌facilité⁣ d’adoption par les équipes ⁤de​ développement, la disponibilité ⁤des compétences sur le marché et la maturité​ de l’écosystème de support. Ainsi, le choix ‍entre Kafka et JMS doit être ⁢guidé par une analyse approfondie des besoins ​spécifiques‌ de l’entreprise et des capacités ⁣de chaque ⁤technologie à s’harmoniser avec l’infrastructure existante.

Recommandations‍ pour une ‍implémentation réussie

Pour ⁢garantir une​ transition fluide vers Kafka ou ‍JMS, il‌ est essentiel ⁤de⁢ suivre quelques lignes directrices. Tout d’abord, évaluez ⁤vos besoins en matière de messagerie. Kafka est ​idéal ⁤pour les scénarios nécessitant un débit élevé⁢ et une capacité de stockage importante⁤ pour les⁤ messages, tandis que JMS convient mieux aux applications nécessitant des fonctionnalités de ​messagerie traditionnelles, comme ⁤la sélection de messages et les transactions distribuées.

  • Assurez-vous de⁣ la compatibilité avec les systèmes existants ⁣ : Kafka ​nécessite ⁤souvent une⁤ architecture et ⁤une ​conception de système spécifiques, tandis que JMS peut être plus facile à intégrer ⁢dans des applications existantes.
  • Prévoyez une formation adéquate pour ⁢les développeurs et​ les administrateurs système afin qu’ils puissent gérer ‍efficacement​ la ​nouvelle technologie.
  • Considérez l’évolutivité de votre solution de messagerie. Kafka est conçu pour être hautement évolutif, mais cela peut nécessiter une configuration ​et ‌une gestion supplémentaires.

Ensuite, ‍la planification de ⁣la migration ⁤est cruciale. Déterminez si vous allez effectuer une migration complète ‌ou si vous allez faire coexister Kafka et‌ JMS pendant une période. Dans les deux cas, une stratégie de migration détaillée est nécessaire ​pour minimiser les interruptions de service. Voici quelques points à‌ considérer :

ÉtapeActionObjectif
1Évaluation des⁣ dépendancesIdentifier les composants affectés
2Test ⁤de chargeAssurer la performance du système
3Migration​ progressiveRéduire les⁢ risques d’interruption
4Surveillance post-migrationIdentifier ⁤et⁢ résoudre ​rapidement⁤ les problèmes

Enfin, ⁣n’oubliez pas de tester minutieusement votre implémentation dans un environnement‌ de⁢ pré-production pour détecter​ les problèmes avant de passer en ⁢production.⁤ Une attention particulière⁣ doit être accordée à la gestion des erreurs et à⁢ la reprise après sinistre pour s’assurer ⁤que votre système ⁤est robuste et fiable.

FAQ

**Q⁤ : Qu’est-ce que​ Kafka ⁣et JMS, et pourquoi les comparerait-on ?**

R : Kafka est ⁤une plateforme de⁤ streaming distribuée ⁣conçue pour gérer de gros volumes⁣ de ‌données en temps réel. JMS, ou ⁣Java Message Service,⁤ est une⁤ API pour les systèmes de messagerie qui permet aux applications⁣ basées sur Java d’envoyer, de recevoir et de lire des ​messages.⁢ On les ​compare souvent car ils​ sont tous deux‍ utilisés‌ pour la gestion des messages dans les systèmes informatiques, mais ils ont été conçus avec des‌ objectifs et des architectures différents.

Q : ⁤Quelle est la principale différence d’architecture entre Kafka et JMS ?

R : L’architecture de Kafka est basée sur⁤ un⁤ modèle de journalisation distribuée où ⁢les messages sont stockés et traités en tant que flux de données. Kafka est conçu pour gérer des volumes de données très élevés et permet ⁣un débit⁣ élevé. JMS, en⁤ revanche, suit un modèle de point⁤ à point ou‌ de publication/abonnement, où ⁤les messages sont ‍envoyés à des destinations spécifiques et consommés ⁢par les‍ abonnés ou les​ récepteurs de messages.

Q : Kafka est-il plus performant ⁢que​ JMS ?

R‌ : Kafka est généralement considéré comme ayant un meilleur débit ⁢et une ‍meilleure scalabilité que la ‍plupart des implémentations JMS, en ‌particulier pour les scénarios nécessitant le ⁢traitement​ de grandes quantités de données en temps réel.​ Cependant, la​ performance peut⁢ varier en fonction ⁣de l’implémentation spécifique de JMS et de​ la configuration du système.

Q ⁢: ​JMS peut-il être utilisé pour le traitement en temps réel comme Kafka ?

R : ⁣Bien⁢ que​ JMS puisse être utilisé⁤ pour des cas d’utilisation en⁢ temps​ réel, il‌ est traditionnellement plus ⁤adapté aux systèmes de messagerie⁢ d’entreprise où la fiabilité et la ‍livraison garantie⁤ des messages sont prioritaires. Kafka, avec son modèle de traitement de flux, est naturellement adapté pour le traitement en temps‌ réel et les analyses de⁢ données en continu.

Q : Comment la fiabilité des messages est-elle gérée différemment dans Kafka et JMS ?

R :‍ JMS se concentre⁣ sur la livraison garantie des‌ messages​ avec ‌des‌ fonctionnalités telles que les accusés⁢ de réception, la persistance des ⁢messages et ‌les transactions. Kafka,‌ quant‍ à‌ lui, utilise un mécanisme de réplication des données ⁢pour assurer⁤ la fiabilité. ⁤Les messages sont‍ répliqués sur plusieurs nœuds du‍ cluster pour prévenir ⁤la⁢ perte de données en cas de défaillance d’un nœud.

Q : ⁤Peut-on dire que Kafka remplace JMS ⁤?

R : Non, Kafka ne remplace⁤ pas JMS car ils​ servent des⁣ objectifs différents. ⁤Kafka est souvent‌ privilégié pour les applications nécessitant un traitement de ⁤flux de données à ⁣grande échelle, tandis ⁢que JMS est mieux ⁢adapté aux applications d’entreprise nécessitant⁤ des‌ modèles‍ de communication ‍complexes et⁤ une livraison de messages fiable. Le​ choix entre Kafka et JMS dépendra​ des besoins ⁢spécifiques du projet.

Q : Kafka et JMS supportent-ils les transactions ?

R : JMS supporte les ⁣transactions, permettant​ aux développeurs‍ de regrouper plusieurs opérations de messages en une seule ⁣unité de⁢ travail qui réussit ou​ échoue dans son ensemble. Kafka a introduit le support des transactions dans les versions plus récentes, ⁣permettant de produire et de consommer des messages dans des transactions atomiques ⁣pour garantir⁢ l’exactitude ​des données.

Q :‍ Est-il⁤ possible d’intégrer Kafka avec ⁢JMS​ ?

R :‍ Oui, il est possible d’intégrer Kafka‍ avec JMS en utilisant des connecteurs ou⁤ des ponts qui permettent aux messages de​ passer ⁢d’un système ‌à l’autre. Cela peut être utile ​pour⁤ les ​entreprises ⁤qui souhaitent tirer parti des forces des deux⁣ technologies dans leur architecture de messagerie.

Réflexions Finales

En somme, la comparaison entre Kafka et JMS est une exploration⁣ fascinante des⁤ nuances qui façonnent le monde⁣ de la messagerie et⁢ du‍ traitement des⁤ données en temps réel. Kafka, avec son architecture robuste et sa capacité ‍à gérer ⁤des volumes massifs de données, offre une solution idéale ⁢pour les applications nécessitant une haute performance et une scalabilité. ⁣D’autre part, JMS, avec son ⁣approche standardisée et sa flexibilité, continue de ‌jouer un rôle crucial dans l’intégration d’applications d’entreprise et la communication asynchrone.

Chaque technologie possède ses propres forces et faiblesses, et le choix ‍entre Kafka et JMS dépendra⁤ finalement des besoins spécifiques de votre projet. Que vous recherchiez⁢ la durabilité ⁤et la distribution à​ grande échelle ou que vous privilégiez la compatibilité‌ et la simplicité, il ⁢est essentiel de peser‌ soigneusement les options avant de prendre ⁤une décision.

Nous espérons‌ que cet article ⁢vous a éclairé sur les différences clés entre Kafka‍ et JMS et vous aidera ⁢à naviguer dans ⁣le ⁤paysage complexe de la messagerie d’entreprise. Que votre chemin vous mène vers l’efficacité ‌de Kafka‍ ou la polyvalence de ‍JMS, que l’architecture que vous choisissez⁣ soit le ⁢fondement solide​ sur lequel vos données circulent avec⁢ aisance et précision. Bonne continuation dans ⁤votre quête de ‍la solution de messagerie parfaite⁢ pour vos applications.