Kafka est le bus de donnees de reference pour l architecture event-driven. En entretien, on evalue la capacite a concevoir des pipelines de streaming robustes.
Qu'est-ce qu'une partition Kafka ? Pourquoi le nombre de partitions est-il critique ?
# Créer un topic avec 6 partitions et facteur de réplication 3
kafka-topics.sh --create --topic orders --partitions 6 --replication-factor 3 --bootstrap-server kafka:9092
# Vérifier le lag d'un consumer group
kafka-consumer-groups.sh --bootstrap-server kafka:9092 --group order-processor --describe
# → LAG = offset max - offset consommé par partitionQuelle est la différence entre at-most-once, at-least-once et exactly-once ? Comment les configurer ?
from kafka import KafkaProducer
import json
# Exactly-once producer
producer = KafkaProducer(
bootstrap_servers='kafka:9092',
value_serializer=lambda v: json.dumps(v).encode('utf-8'),
acks='all', # confirmation de tous les replicas ISR
retries=5, # retry en cas d'erreur réseau
retry_backoff_ms=300,
enable_idempotence=True, # exactly-once : déduplique les retries
max_in_flight_requests_per_connection=5
)
future = producer.send('orders',
key=b'customer-123',
value={'order_id': 456, 'amount': 89.90}
)
record_metadata = future.get(timeout=10)
print(f"Partition: {record_metadata.partition}, Offset: {record_metadata.offset}")Qu'est-ce qu'un consumer group ? Que se passe-t-il lors d'un rebalancing ?
from kafka import KafkaConsumer
import json
consumer = KafkaConsumer(
'orders',
bootstrap_servers='kafka:9092',
group_id='order-processor', # consumer group ID
auto_offset_reset='earliest', # 'latest' = ignorer le backlog
enable_auto_commit=False, # commit manuel = contrôle total
value_deserializer=lambda x: json.loads(x.decode('utf-8'))
)
for msg in consumer:
process(msg.value)
consumer.commit() # committer après traitement réussiQuand choisissez-vous Kafka Streams, ksqlDB ou Flink ?
| Outil | Paradigme | Cas d'usage | Complexité |
|---|---|---|---|
| Kafka Streams | Librairie Java/Scala | Transformations légères, enrichissement, agrégations | Faible |
| ksqlDB | SQL sur Kafka | Prototypage, équipes SQL, streams simples | Très faible |
| Flink | Framework distribué | Streaming complexe, joins multi-sources, exactement-once | Élevée |
| Spark Streaming | Micro-batch | Équipes Spark existantes, latence >1s acceptable | Moyenne |
Pourquoi utiliser un Schema Registry ? Comment gérez-vous l'évolution des schémas ?
# Schéma Avro pour un event commande
{
"type": "record",
"name": "Order",
"namespace": "io.databuilder",
"fields": [
{"name": "order_id", "type": "string"},
{"name": "amount", "type": "double"},
{"name": "currency", "type": "string", "default": "EUR"},
{"name": "created_at", "type": "long", "logicalType": "timestamp-millis"}
]
}Quels patterns d'architecture utilisez-vous avec Kafka en production ?
| Niveau | Maîtrise | Signal GO | NO-GO |
|---|---|---|---|
| Junior | Concepts topics/partitions/offsets, consumer group basique | Explique ce qu'est un offset et un consumer group, sait produire/consommer en Python | Confond topic et partition, ne sait pas ce qu'est un offset |
| Confirmé | Garanties de livraison, rebalancing, Schema Registry, Kafka Connect | Configure exactly-once, utilise Debezium pour le CDC, a géré des lags en prod | Ne sait pas la différence entre at-least-once et exactly-once |
| Senior | Architecture event-driven, patterns Saga/CQRS, optimisation throughput, monitoring | A conçu une architecture event-driven complète, sait dimensionner les partitions | Ne sait pas ce qu'est le rebalancing ni son impact |
Premier entretien gratuit. Rapport GO/NO-GO sous 48h.