La communauté Apache Kafka a frappé fort avec la sortie de la version 4.0, apportant un ensemble de nouveautés et d'améliorations significatives. Voici un aperçu des changements majeurs :
Fin de l'ère Apache Zookeeper
Après plus de 10 ans de loyaux services, Zookeeper tire sa révérence. Apache Kafka 4.0 est la première release sans Zookeeper, remplacé par KRaft. Cette transition apporte plusieurs avantages :
- Simplification de l'administration : Moins de composants à gérer.
- Performances accrues : KRaft est optimisé pour Kafka.
- Facilité de développement local : Les images natives disponibles depuis Apache Kafka 3.8.0, rendent les configurations Docker Compose encore plus simples.
Exemple de Docker Compose simplifié :
services:
broker:
image: apache/kafka-native:latest
hostname: broker
container_name: broker
ports:
- '9092:9092'
environment:
KAFKA_NODE_ID: 1
...
Rebalancing ultra performant
Depuis Apache Kafka 3.7.0, la communauté expérimente un nouveau mode de rebalancement qui améliore grandement les performances. En tant qu’utilisateurs d’Apache Kafka, nous avons tous été confrontés aux problématiques de rebalance, notamment avec le fameux "stop-the-world". Les plus téméraires auront même testé le CooperativeStickyAssignor. Ce nouveau protocole est activé par défaut sur cette version. Plus d'informations dans la KIP-848
Les queues arrivent...
... timidement en Early Access mais cette extension des capacités de Apache Kafka nous permettra de gérer encore plus de use-cases au sein de la même plateforme. Pour pouvoir les tester, vous pouvez activer cette fonctionnalité dans la configuration de votre broker.
unstable.api.versions.enable=true
group.coordinator.rebalance.protocols=classic,consumer,share
Vous pouvez ensuite consommer un topic en mode "Queue" via la nouvelle CLI
$ bin/kafka-console-share-consumer.sh --bootstrap-server localhost:9092 --topic mon-topic
Autres améliorations et évolutions
Cette release arrive avec un ensemble d'évolution et d'améliorations qu'il serait difficile de lister. En voici un résumé:
- Fin du support de java 8 : Maintenant, c'est Java 11 minimum pour les clients Kafka (consumer / producer / kafka stream) et c'est Java 17 pour le Broker, Kafka Connect et les autres outils.
- Quelques changements de configuration par défaut : la plus notable sur le linger.ms. Il passe de 0 à 5 ms. Enfin, par défaut, Apache Kafka va regrouper les messages côté producer, réduisant ainsi les échanges avec le broker.
- Clarification des montées de versions : Nous avons souvent des doutes lors de la montée de version d'une librairie. Celle-ci peut être ancienne et le gap pour passer à la plus récente peut faire peur. Avec cette release, la communauté a mis à disposition un tableau récapitulatif pour éviter les mauvaises surprises.
En voici un résumé:
Version source | Version intermédiaire | Mise à jour vers 4.x |
---|---|---|
2.1.x - 3.9.x | non requis | Simple et supporté |
0.11.x - 2.0.x | passer par une 3.4.x - 3.9.x | Simple et supporté |
0.11.x - 2.0.x | Sans version intermédiaire, non testé et non supporté |
- Nouvelle valeur pour auto.offset.reset : Il nous permet de positionner correctement un consommateur sur un topic quand son offset est invalide ou inexistant. Nous connaissons historiquement le earliest, latest et none. Une nouvelle valeur permet désormais de repositionner un consommateur à une date précise (ISO8601 - PnDTnHnMn.nS). Cette option évite de manipuler les offsets manuellement via les CLIs.
auto.offset.reset=by_duration:P30D (This reset back by 30 days)
En route vers la version Apache Kafka 5.0
Le changelog complet de la version 4.0 est disponible ici. L’avenir d’Apache Kafka reste à écrire, mais la version 4.0 pose des bases solides pour ses futures évolutions. Pour rappel, la version 3.0.0 est sortie il y a 3 ans et demi. Il nous tarde de découvrir la suite ! Peut-être allons-nous avoir des surprises au Current London du 20-21 mai 2025 !