Intégrer jBPM avec un serveur Apache Kafka – Guide complet

 💡 Introduction

Dans les architectures modernes orientées événements, l’intégration de ⚙️ jBPM (Business Process Management) avec 📡 Apache Kafka permet d’obtenir une visibilité et une automatisation en temps réel entre différents systèmes.

jBPM peut envoyer automatiquement ses événements de processus, mises à jour de tâches et journaux vers un serveur Kafka (broker) — facilitant l’analyse, l’audit et la communication entre microservices.

Ce guide explique comment connecter jBPM à un serveur Kafka sans aucun code Java, uniquement avec des paramètres dans WildFly / KIE Server.


⚙️ 1️⃣ Prérequis

Avant de commencer, assurez-vous d’avoir :

Un serveur Kafka (Broker) en cours d’exécution
(ex. : localhost:9092 ou votre IP/port distant)
jBPM / KIE Server déployé sur WildFly
✅ L’accès pour modifier standalone.xml ou standalone.conf

Si vous utilisez un Kafka hébergé dans le cloud (comme Azure Event Hubs ou Confluent Cloud), notez les paramètres de connexion (hôte, port, protocole, mot de passe ou chaîne de connexion).


🧠 2️⃣ Activer le module jBPM Kafka Event Emitter

jBPM inclut un module prêt à l’emploi :
org.jbpm:jbpm-event-emitters-kafka

Il envoie automatiquement les événements de processus et de tâches vers Kafka lorsqu’il est activé.

🔹 Ajouter cette dépendance à votre KIE Server (si absente) :

<dependency> <groupId>org.jbpm</groupId> <artifactId>jbpm-event-emitters-kafka</artifactId> <version>7.74.1.Final</version> </dependency>

🧩 3️⃣ Configurer la connexion Kafka dans WildFly

Ouvrez votre fichier standalone.xml (ou standalone-full.xml)
et ajoutez ce bloc dans la section <system-properties> :

🧾 Exemple : Serveur Kafka local (sans sécurité)

<system-properties> <property name="org.jbpm.event.emitters.kafka.bootstrap.servers" value="localhost:9092"/> <property name="org.jbpm.event.emitters.kafka.topic" value="jbpm-logs"/> <property name="org.jbpm.event.emitters.kafka.client.id" value="jbpm-emitter"/> </system-properties>

Cela indique à jBPM d’envoyer tous les événements métiers vers le topic Kafka jbpm-logs.


🔐 4️⃣ Si Kafka utilise SSL ou une authentification

Si votre cluster Kafka nécessite un mot de passe, du SSL ou une chaîne de connexion (comme Azure Event Hubs), utilisez les propriétés suivantes :

🔹 Pour une authentification SSL

<system-properties> <property name="org.jbpm.event.emitters.kafka.bootstrap.servers" value="10.10.1.25:9093"/> <property name="org.jbpm.event.emitters.kafka.topic" value="jbpm-logs"/> <property name="org.jbpm.event.emitters.kafka.client.id" value="jbpm-emitter"/> <property name="org.jbpm.event.emitters.kafka.security.protocol" value="SSL"/> <property name="org.jbpm.event.emitters.kafka.ssl.truststore.location" value="/opt/wildfly/config/truststore.jks"/> <property name="org.jbpm.event.emitters.kafka.ssl.truststore.password" value="changeit"/> </system-properties>

🔹 Pour Kafka dans le cloud (Azure Event Hubs – SASL_SSL)

<system-properties> <property name="org.jbpm.event.emitters.kafka.bootstrap.servers" value="VOTRE-NAMESPACE.servicebus.windows.net:9093"/> <property name="org.jbpm.event.emitters.kafka.security.protocol" value="SASL_SSL"/> <property name="org.jbpm.event.emitters.kafka.sasl.mechanism" value="PLAIN"/> <property name="org.jbpm.event.emitters.kafka.sasl.jaas.config" value="org.apache.kafka.common.security.plain.PlainLoginModule required username='$ConnectionString' password='Endpoint=sb://VOTRE-NAMESPACE.servicebus.windows.net/;SharedAccessKeyName=VOTRE_SAS_KEY_NAME;SharedAccessKey=VOTRE_SAS_KEY;EntityPath=VOTRE_EVENT_HUB';"/> <property name="org.jbpm.event.emitters.kafka.topic" value="VOTRE_EVENT_HUB"/> <property name="org.jbpm.event.emitters.kafka.client.id" value="jbpm-emitter"/> <property name="org.jbpm.event.emitters.kafka.client.dns.lookup" value="use_all_dns_ips"/> </system-properties>

💡 La propriété use_all_dns_ips permet au client Kafka de se connecter à toutes les adresses IP renvoyées par le DNS, ce qui améliore la fiabilité sur les plateformes cloud.


📈 5️⃣ Redémarrer et vérifier l’intégration

Redémarrez WildFly ou KIE Server :

./bin/standalone.sh -c standalone-full.xml

Consultez les logs :

INFO [org.jbpm.event.emitters.kafka.KafkaEventEmitter] Connexion au broker Kafka à localhost:9092 INFO [org.jbpm.event.emitters.kafka.KafkaEventEmitter] Événement envoyé avec succès au topic jbpm-logs

✅ Si vous voyez ces lignes, la connexion à Kafka est opérationnelle !


🔍 6️⃣ Vérifier côté Kafka

Dans votre terminal Kafka :

bin/kafka-console-consumer.sh --topic jbpm-logs --bootstrap-server localhost:9092 --from-beginning

Vous verrez des messages JSON similaires à :

{ "processId": "OrderProcess", "instanceId": 101, "eventType": "PROCESS_STARTED", "timestamp": "2025-10-07T14:21:05Z" }

Chaque ligne correspond à un événement jBPM : démarrage de processus, fin de tâche, modification de variable, etc.


📊 7️⃣ Conseils de configuration

ObjectifPropriétéExemple
Modifier le nom du topicorg.jbpm.event.emitters.kafka.topicprocess-events
Ajuster les tentativesorg.jbpm.event.emitters.kafka.retries5
Timeout de requêteorg.jbpm.event.emitters.kafka.request.timeout.ms60000
Mode d’accusé de réceptionorg.jbpm.event.emitters.kafka.acksall

🔄 8️⃣ Option – Utiliser une tâche REST au lieu de l’émetteur Kafka

Si vous préférez ne pas utiliser l’émetteur d’événements, ajoutez une tâche REST dans votre processus BPMN pour appeler directement le Kafka REST Proxy — sans code Java.

Exemple :

  • URL → http://<kafka-rest>:8082/topics/jbpm-logs

  • Méthode → POST

  • Corps JSON :

{ "records": [ { "key": "jbpm", "value": { "processId": "#{processInstanceId}", "event": "#{eventType}" } } ] }

🧠 9️⃣ Avantages de l’intégration jBPM + Kafka

✅ Supervision temps réel des processus
✅ Centralisation et analyse des logs
✅ Intégration fluide avec ELK, OpenTelemetry ou Flink
✅ Architecture découplée et hautement évolutive


🏁 Conclusion

🎯 En intégrant jBPM avec un serveur Kafka, vous transformez vos processus métiers en workflows dynamiques et orientés événements.

Chaque événement jBPM devient un message Kafka — prêt à alimenter vos tableaux de bord, systèmes d’alerte ou plateformes analytiques en temps réel.

Cette approche est la base d’une automatisation intelligente, évolutive et centrée sur les données.


💼 Support professionnel disponible

Si vous rencontrez des problèmes sur des projets réels liés au développement backend d’entreprise ou à l’automatisation des workflows, je propose des services de conseil payants, de débogage en production, de support projet et de formations ciblées.

Les technologies couvertes incluent Java, Spring Boot, PL/SQL, Azure, ainsi que l’automatisation des workflows (jBPM, Camunda BPM, RHPAM).

📧 Contact: ishikhanirankari@gmail.com | info@realtechnologiesindia.com


Comments

Popular posts from this blog

jBPM Installation Guide: Step by Step Setup

Scopes of Signal in jBPM

OOPs Concepts in Java | English | Object Oriented Programming Explained