# Apache Kafka - Didacticiels

## Comment provisionner un PaaS Apache Kafka ? <a href="#postgresqlhowtos-commentprovisionnerunpaaspostgresql" id="postgresqlhowtos-commentprovisionnerunpaaspostgresql"></a>

Pour commencer, rendez-vous sur ITCare et recherchez votre service global cible où vous créerez votre nouveau cluster Apache Kafka.

Recherchez votre service Global dans la barre de recherche supérieure et cliquez dessus pour afficher sa page d'information.

Une fois dans votre Service Global, cliquez sur le bouton **Créer une ressource**, sélectionnez **Apache Kafka** et la version requise.

Remplir le formulaire :

* Définir le nom du futur cluster
* Le nombre de broker (3+)
* Le dimensionnement
* Le stockage requis sur chaque broker
* La localisation cible
* Le réseau cible
* Les options de gestion (sauvegarde, surveillance, 24/7, réplication site distant)

Cliquer sur **Suivant** une fois les champs remplis. A l'étape suivante, saisir le mot de passe du compte super user qui sera fourni puis cliquer sur **Suivant**.

{% hint style="warning" %}
Les mots de passe ne sont pas sauvegardés par cegedim.cloud.

Assurez-vous de sauvegarder votre mot de passe!
{% endhint %}

Réviser la synthèse avant de soumettre le formulaire.

{% hint style="info" %}
Le provisionnement peut prendre jusqu'à 2 heures en fonction de la charge actuelle de l'automatisation.
{% endhint %}

Une fois le déploiement prêt, vous en serez informé par e-mail.

## Démarrer un cluster

En haut de la page du cluster, cliquez sur le bouton **Gérer**, puis sur **Démarrer** et confirmer.

{% hint style="info" %}
Le démarrage d'un cluster démarre toutes les machines virtuelles attachées au cluster.
{% endhint %}

Une notification par courriel sera envoyée lorsque le service sera activé.

## Arrêter un cluster

En haut de la page du cluster, cliquez sur le bouton **Gérer**, puis sur **Stop**.

Saisissez un numéro RFC pour le suivi (facultatif). Cliquez sur **Soumettre**.

{% hint style="warning" %}
L'arrêt d'un cluster arrêtera toutes les machines virtuelles attachées au cluster et la surveillance sera désactivée.
{% endhint %}

Une notification par courrier électronique sera envoyée lorsque le cluster sera arrêté.

## Redimensionner les nœuds

En haut de la page du cluster, cliquez sur le bouton **Gérer**, puis sur **Redimensionner les nœuds**.

Sélectionnez les nœuds que vous souhaitez redimensionner et sélectionnez la nouvelle taille (cpu/ram).

{% hint style="info" %}
Chaque nœud sera redimensionné et redémarré de manière séquentielle.
{% endhint %}

Une notification par courriel sera envoyée lorsque tous les nœuds auront été redimensionnés.

## Supprimer un cluster

En haut de la page du cluster, cliquez sur le bouton **Gérer**, puis sur **Supprimer**. Cette action arrêtera et supprimera toutes les machines virtuelles.

{% hint style="danger" %}
Veuillez noter que cette action n'est pas récupérable!
{% endhint %}

Saisissez un numéro RFC pour le suivi (facultatif), puis cliquez sur **Soumettre**.

Une notification par courriel sera envoyée lorsque le cluster sera supprimé.

## Comment gérer Apache Kafka ?

Pour interagir avec votre cluster sécurisé en utilisant les scripts Kafka, vous devez d'abord télécharger l'archive Apache Kafka depuis le site officiel.

{% embed url="<https://kafka.apache.org/downloads>" %}

Idéalement, vous devriez télécharger la version exacte correspondant à votre cluster.

Une fois dézippé et désarchivé sur votre serveur ou client Linux, vous trouverez les scripts shell Kafka dans le répertoire /bin.

Ces scripts permettent de :

* Produire et consommer
* Gérer les utilisateurs
* Gérer les sujets
* ACL de gestion
* Gérer les configurations des articles

Ce guide n'entrera pas dans les détails de tous les scripts mais vous aidera à démarrer avec des commandes simples.

### Authentification <a href="#apachekafkahowtos-authentification" id="apachekafkahowtos-authentification"></a>

Pour se connecter à un cluster Kafka sécurisé, vous devez configurer un keystore et un fichier de propriétés.

#### Créer un keystore <a href="#apachekafkahowtos-creerunkeystore" id="apachekafkahowtos-creerunkeystore"></a>

Créez le keystore avec le certificat fourni :

{% code overflow="wrap" %}

```bash
keytool -keystore kafka.client.truststore.jks -alias ca-cert-cluster1 -import -file ca-cert -storepass <redacted> -keypass <redacted> -noprompt
```

{% endcode %}

* **Alias :** alias du certificat dans le keystore
* **Import-file**: nom du fichier de certificat contenant le certificat fourni
* **Storepass** et **keypass :** mot de passe pour protéger votre keystore, doivent être identiques

Pour lister le contenu de votre keystore, utilisez cette commande :

```bash
keytool -list -v -keystore kafka.client.truststore.jks
```

#### Fichier de propriétés <a href="#apachekafkahowtos-dossierdepropriete" id="apachekafkahowtos-dossierdepropriete"></a>

Une fois le keystore créé, il vous faut maintenant un fichier de propriétés :

```ini
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-256
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="user" password="password";
ssl.truststore.location=/path/to/kafka.client.truststore.jks
ssl.truststore.password=keystore-password
```

* **username :** le super utilisateur kafka qui vous est fourni par email
* **mot de passe :** le mot de passe de cet utilisateur que vous avez fourni lors du provisionnement.
* **ssl.truststore.location :** l'emplacement de votre keystore précédemment créé
* **ssl.truststore.password :** le mot de passe pour déverrouiller votre keystore (storepass / keypass utilisé)

#### Ligne de commande <a href="#apachekafkahowtos-lignedecommande" id="apachekafkahowtos-lignedecommande"></a>

Avec ces éléments, vous pouvez maintenant utiliser n'importe quel script shell Kafka avec le paramètre suivant :

```
--command-config client.properties
```

### Gérer les topics <a href="#apachekafkahowtos-gererlessujets" id="apachekafkahowtos-gererlessujets"></a>

#### Créer un topic <a href="#apachekafkahowtos-creerunsujet" id="apachekafkahowtos-creerunsujet"></a>

{% code overflow="wrap" %}

```
# Use an env variable for short commands, the bootstrap-server is available in ITCare
export BROKERS=broker1.hosting.cegedim.cloud:9094,broker2.hosting.cegedim.cloud:9094,broker3.hosting.cegedim.cloud:9094 
```

{% endcode %}

<pre class="language-bash" data-overflow="wrap"><code class="lang-bash"><strong>kafka-topics.sh --bootstrap-server $BROKERS --create --replication-factor 3 --partitions 3 --topic my-topic --command-config client.properties 
</strong>Created topic my-topic.
</code></pre>

#### Lister des topics <a href="#apachekafkahowtos-listedessujets" id="apachekafkahowtos-listedessujets"></a>

<pre data-overflow="wrap"><code><strong>kafka-topics.sh --bootstrap-server $BROKERS -list --command-config client.properties my-topic
</strong></code></pre>

#### Décrire un topic <a href="#apachekafkahowtos-decrireunsujet" id="apachekafkahowtos-decrireunsujet"></a>

<pre data-overflow="wrap"><code><strong>kafka-topics.sh --bootstrap-server $BROKERS --describe --topic my-topic --command-config client.properties 
</strong>Topic: my-topic	      TopicId: 84yqCErzTG27J4wv44dkPQ	PartitionCount: 4	ReplicationFactor: 3	Configs: cleanup.policy=delete
Topic: my-topicc	Partition: 0	Leader: 2	Replicas: 2,3,1	Isr: 2,3,1
Topic: my_topic		Partition: 1	Leader: 3	Replicas: 3,1,2	Isr: 3,1,2
Topic: my_topic		Partition: 2	Leader: 1	Replicas: 1,2,3	Isr: 1,2,3
Topic: my_topic		Partition: 3	Leader: 2	Replicas: 2,1,3	Isr: 2,1,3
</code></pre>

#### Supprimer un topic <a href="#apachekafkahowtos-supprimerunsujet" id="apachekafkahowtos-supprimerunsujet"></a>

<pre data-overflow="wrap"><code><strong>kafka-topics.sh --bootstrap-server $BROKERS --delete --topic my-topic --command-config client.properties
</strong></code></pre>

#### Ajouter des partitions au topic <a href="#apachekafkahowtos-ajouterdespartitionsautheme" id="apachekafkahowtos-ajouterdespartitionsautheme"></a>

{% code overflow="wrap" %}

```
kafka-topics.sh --bootstrap-server $BROKERS --alter --topic my-topic --partitions 16 --command-config client.properties
```

{% endcode %}

#### Lister les partitions sous-répliquées pour tous les topics <a href="#apachekafkahowtos-listedespartitionssous-repliqueespourtouslessujets" id="apachekafkahowtos-listedespartitionssous-repliqueespourtouslessujets"></a>

{% code overflow="wrap" %}

```
kafka-topics.sh --bootstrap-server $BROKERS --describe --under-replicated-partitions --command-config client.properties
```

{% endcode %}

#### Lister les ACLs pour un topic <a href="#apachekafkahowtos-listedesaclspourunsujet" id="apachekafkahowtos-listedesaclspourunsujet"></a>

{% code overflow="wrap" %}

```
kafka-acls.sh --bootstrap-server $BROKERS --topic=my-topic --list --command-config client.properties
```

{% endcode %}

### Gérer les utilisateurs <a href="#apachekafkahowtos-gererlesutilisateurs" id="apachekafkahowtos-gererlesutilisateurs"></a>

#### Créer un utilisateur Kafka <a href="#apachekafkahowtos-creerunutilisateurkafka" id="apachekafkahowtos-creerunutilisateurkafka"></a>

{% code overflow="wrap" %}

```
kafka-configs.sh --bootstrap-server $BROKERS --alter --add-config 'SCRAM-SHA-256=[password=secret]' --entity-type users --entity-name username --command-config client.properties
```

{% endcode %}

#### Lister des utilisateurs de Kafka <a href="#apachekafkahowtos-listedesutilisateursdekafka" id="apachekafkahowtos-listedesutilisateursdekafka"></a>

{% code overflow="wrap" %}

```
kafka-configs.sh --bootstrap-server $BROKERS --describe --entity-type users --command-config client.properties
```

{% endcode %}

#### Supprimer un utilisateur Kafka <a href="#apachekafkahowtos-supprimerunutilisateurkafka" id="apachekafkahowtos-supprimerunutilisateurkafka"></a>

{% code overflow="wrap" %}

```
kafka-configs.sh --bootstrap-server $BROKERS --alter --delete-config 'SCRAM-SHA-256' --entity-type users --entity-name username --command-config client.properties
```

{% endcode %}

#### Lister tous les ACLs <a href="#apachekafkahowtos-listedetouslesacls" id="apachekafkahowtos-listedetouslesacls"></a>

{% code overflow="wrap" %}

```
kafka-acls.sh --bootstrap-server $BROKERS --list --command-config client.properties
```

{% endcode %}

#### Lister les ACL pour un utilisateur Kafka <a href="#apachekafkahowtos-listedesaclpourlutilisateurkafka" id="apachekafkahowtos-listedesaclpourlutilisateurkafka"></a>

{% code overflow="wrap" %}

```
kafka-acls.sh --bootstrap-server $BROKERS --principal User:admin --list --command-config client.properties
```

{% endcode %}

#### Définir des ACL pour un utilisateur Kafka <a href="#apachekafkahowtos-definiraclpourlutilisateurkafka" id="apachekafkahowtos-definiraclpourlutilisateurkafka"></a>

{% code overflow="wrap" %}

```
kafka-acls.sh --bootstrap-server $BROKERS --add --allow-principal User:alice --producer --topic my-topic --command-config client.properties
```

{% endcode %}

#### Supprimer un ACL pour un utilisateur Kafka <a href="#apachekafkahowtos-supprimerlaclpourlutilisateurkafka" id="apachekafkahowtos-supprimerlaclpourlutilisateurkafka"></a>

{% code overflow="wrap" %}

```
kafka-acls.sh --bootstrap-server $BROKERS --remove --allow-principal User:bob --consumer --topic my-topic --group my-consumer-group --command-config client.properties
```

{% endcode %}

### Producteurs <a href="#apachekafkahowtos-produits" id="apachekafkahowtos-produits"></a>

#### Lancer un producteur de message <a href="#apachekafkahowtos-lancerunproducteur" id="apachekafkahowtos-lancerunproducteur"></a>

{% code overflow="wrap" %}

```
kafka-console-producer.sh --broker-list $BROKERS --topic my-topic --producer.config client.properties 
>
```

{% endcode %}

### Consommateurs <a href="#apachekafkahowtos-consommez" id="apachekafkahowtos-consommez"></a>

#### Lancer un consommateur <a href="#apachekafkahowtos-lancerunconsommateur" id="apachekafkahowtos-lancerunconsommateur"></a>

{% code overflow="wrap" %}

```
kafka-console-consumer.sh --bootstrap-server $BROKERS --topic my-topic --consumer.config client.properties --group consu
```

{% endcode %}

#### Lister tous les groupes de consommateurs <a href="#apachekafkahowtos-listedetouslesgroupesdeconsommateurs" id="apachekafkahowtos-listedetouslesgroupesdeconsommateurs"></a>

{% code overflow="wrap" %}

```
kafka-consumer-groups.sh --list --bootstrap-server $BROKERS --command-config client.properties
```

{% endcode %}

#### Décrire le groupe de consommateurs <a href="#apachekafkahowtos-decrirelegroupedeconsommateurs" id="apachekafkahowtos-decrirelegroupedeconsommateurs"></a>

{% code overflow="wrap" %}

```
kafka-run-class.sh kafka.admin.ConsumerGroupCommand --bootstrap-server $BROKERS --describe --group consu --command-config client.properties
```

{% endcode %}

#### Supprimer un groupe de consommateurs <a href="#apachekafkahowtos-supprimerungroupedeconsommateurs" id="apachekafkahowtos-supprimerungroupedeconsommateurs"></a>

{% code overflow="wrap" %}

```
kafka-consumer-groups.sh --bootstrap-server $BROKERS --group my-group --group my-other-group --delete --command-config client.properties
```

{% endcode %}

## Kcat <a href="#apachekafkahowtos-kafkacat" id="apachekafkahowtos-kafkacat"></a>

Kcat est un producteur et consommateur générique non-JVM pour Apache Kafka >=0.8.

{% embed url="<https://github.com/edenhill/kafkacat>" %}

La version 1.5.0 et supérieure doit être utilisée pour prendre en charge l'authentification SASL\_SSL.

De plus amples informations concernant Kcat sont disponibles sur le site de Confluent :

{% embed url="<https://docs.confluent.io/platform/current/app-development/kafkacat-usage.html>" %}

## Clients Kafka <a href="#apachekafkahowtos-clientskafka" id="apachekafkahowtos-clientskafka"></a>

Veuillez vous référer à cette documentation pour créer un client Kafka dans la langue de votre choix :

{% embed url="<https://docs.confluent.io/home/clients/overview.html>" %}

## Connecteurs Kafka <a href="#apachekafkahowtos-connecteurskafka" id="apachekafkahowtos-connecteurskafka"></a>

Veuillez vous référer à cette documentation pour en savoir plus sur les connecteurs Kafka :

{% embed url="<https://docs.confluent.io/home/connect/overview.html>" %}

## Ajouter un noeud broker Kafka <a href="#apachekafkahowtos-noeudbrokerkafka" id="apachekafkahowtos-noeudbrokerkafka"></a>

En haut de la page du cluster, cliquez sur le bouton **Gérer**, puis sur **Ajouter un nœud broker**. Sélectionnez la taille du disque et la zone de disponibilité.

Saisissez un numéro RFC pour le suivi (facultatif), puis cliquez sur **Soumettre**.

{% hint style="info" %}
Cette fonctionnalité n'est disponible que pour les versions Kafka 3.6 ou plus. Un seul nœud peut être créé à la fois. Le nom du nœud, la RAM ainsi que le CPU sont prédéfinis afin d'assurer la cohérence du cluster.
{% endhint %}

Une notification par courriel sera envoyée lorsque le nœud aura été créé.
