Construction de consommateurs Kafka

Construisez des consommateurs et producteurs Apache Kafka fiables — groupes de consommateurs et affectation des partitions, stratégie de validation des offsets, au-moins-une-fois vs exactement-une-fois, producteurs idempotents/transactionnels, rééquilibrage et gestion des messages morts.

Qu'est-ce que Construction de consommateurs Kafka ?

Cette compétence vous guide dans la construction de consommateurs et producteurs Apache Kafka robustes. Elle couvre des aspects essentiels tels que l'affectation des partitions et le dimensionnement des groupes de consommateurs, la stratégie de validation des offsets (avec commit manuel recommandé), et les garanties de livraison (au-moins-une-fois vs exactement-une-fois). Elle explique en détail comment implémenter des sinks idempotents pour gérer les doublons inévitables, comment gérer les rééquilibrages de partitions via des callbacks de révocation, et comment router les messages empoisonnés vers un sujet de lettres mortes. Le contenu est présenté sous forme de workflow pas-à-pas, de patterns de code concrets (Python), et met en garde contre les pièges courants comme le auto-commit avec traitement lent ou le déséquilibre consommateurs/partitions. Elle est idéale pour les développeurs utilisant les clients Kafka natifs, et ne doit pas être utilisée pour le traitement de flux (streaming) qui nécessite une compétence dédiée.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Unknown-333/awesome-data-engineering-skills/tree/main/skills/building-kafka-consumers

Installed? Explore more Recherche et analyse de données skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait Construction de consommateurs Kafka ?

Quand l'utiliser

  • Écrire ou déboguer des consommateurs/producteurs Kafka.
  • Choisir la stratégie de validation des offsets et les garanties de livraison.
  • Ajuster le parallélisme des groupes de consommateurs, le rééquilibrage ou la gestion des messages morts.
  • Ne PAS utiliser pour le traitement de flux / fenêtrage (utiliser processing-streaming-data).

Workflow

- [ ] Dimensionner les partitions en fonction du parallélisme cible (consommateurs <= partitions)
- [ ] Valider les offsets APRÈS le traitement réussi
- [ ] Rendre le sink idempotent (upsert par clé d'événement)
- [ ] Gérer les rééquilibrages (valider lors de la révocation, éviter les longs intervalles de poll)
- [ ] Router les messages empoisonnés vers un sujet de lettres mortes
  1. Les partitions limitent le parallélisme. Un groupe de consommateurs ne peut monter en charge que jusqu'au nombre de partitions ; les consommateurs supplémentaires restent inactifs. Choisissez les partitions en fonction du débit de pointe.
  2. Valider après le traitement. Ne validez les offsets qu'une fois le travail durablement effectué, pas avant — une validation précoce entraîne la perte de messages en cas de crash.
  3. Sink idempotent. Au-moins-une-fois signifie des doublons en cas de nouvelle tentative ; effectuez un upsert avec une clé d'événement stable pour que le retraitement soit inoffensif.
  4. Les rééquilibrages arrivent. Validez lors de la révocation de partition et maintenez les intervalles poll() en dessous de max.poll.interval.ms pour que le broker n'expulse pas le consommateur.
  5. Les messages empoisonnés sont envoyés vers un sujet de lettres mortes avec l'erreur, afin qu'un mauvais enregistrement ne bloque pas toute la partition.

Patterns

Commit manuel après traitement :

consumer = KafkaConsumer("orders", group_id="etl",
                         enable_auto_commit=False,
                         max_poll_records=500)
for msg in consumer:
    try:
        upsert(process(msg))          # idempotent par clé
        consumer.commit()             # valider seulement après succès
    except PoisonError:
        send_to_dlq(msg)
        consumer.commit()             # ignorer le mauvais enregistrement

Producteur idempotent / transactionnel — définissez enable.idempotence=true (dédouble les tentatives) et utilisez des transactions pour un read-process-write exactement-une-fois entre sujets.

Réglage du débit — augmentez max.poll.records, fetch.min.bytes, et traitez par lots ; gardez le traitement rapide pour éviter l'expulsion lors du rééquilibrage.

Pièges courants

  • Auto-commit + traitement lent — les offsets avancent avant la fin du travail ; un crash entraîne la perte de messages. Préférez le commit manuel après traitement.
  • Plus de consommateurs que de partitions — les consommateurs supplémentaires restent inactifs ; repartitionnez pour monter en charge.
  • Traitement long entre les polls — dépasse max.poll.interval.ms et déclenche des rééquilibrages infinis ; traitez par lots limités ou utilisez un worker en arrière-plan.
  • Absence de chemin de lettres mortes — un message empoisonné bloque toute la partition.
  • Compter sur l'exactement-une-fois sans sink idempotent — tout saut au-moins-une-fois réintroduit des doublons.

Individual skills in this repo

This repo contains 9 individual skills — each has its own dedicated page.

Unknown-333/authoring-airflow-dags

Write production-grade Apache Airflow DAGs using the TaskFlow API — idempotent tasks, correct scheduling and catchup, retries/SLAs, connections/variables, and avoiding top-level code. Use when creating or reviewing Airflow DAGs, scheduling pipelines, wiring task dependencies, configuring retries/backfills, or fixing non-idempotent tasks.

Unknown-333/building-dagster-assets

Build Dagster pipelines using software-defined assets — asset dependencies, partitions, resources and IO managers, asset checks, and schedules/sensors. Use when creating Dagster assets or jobs, modeling data as assets, adding partitions or backfills, wiring resources/IO managers, or migrating from task-based orchestration to assets.

Unknown-333/building-dbt-models

Build well-structured dbt models — staging/intermediate/marts layers, ref() and source(), materializations, and incremental models with the right strategy. Use when creating or refactoring dbt models, choosing table vs view vs incremental, structuring a dbt project, or writing incremental logic.

Unknown-333/building-feature-pipelines

Build ML feature pipelines and feature stores — point-in-time-correct joins to avoid label leakage, offline/online parity, feature freshness and backfills, and materialization with tools like Feast. Use when engineering features for ML, preventing train/serve skew or data leakage, building a feature store, or backfilling historical features for training.

Unknown-333/building-iceberg-tables

Design and operate Apache Iceberg tables — partitioning and hidden partitioning, partition/schema evolution, snapshots and time travel, compaction and small-file cleanup, and MERGE/upsert for lakehouse tables on Spark, Flink, Trino, or Snowflake. Use when creating or maintaining Iceberg tables, choosing partitioning, evolving schema/partitions, or fixing small-file and metadata bloat.

Unknown-333/building-ingestion-pipelines

Build batch and incremental data ingestion (extract-load) pipelines — full vs incremental extraction, change data capture (CDC), watermarks and high-water marks, API pagination and rate limits, and choosing managed EL tools (Fivetran, Airbyte) vs custom code. Use when ingesting data from databases, APIs, files, or SaaS into a warehouse/lake, or designing incremental extraction and CDC.

Unknown-333/debugging-data-pipelines

Systematically root-cause data pipeline failures and data incidents — job errors, wrong or missing data, duplicates, and freshness misses — by tracing lineage upstream, isolating the failing stage, reconciling against source, and planning a safe fix and backfill. Use when a pipeline fails, numbers look wrong, data is missing or duplicated, a dashboard is stale, or a stakeholder reports a data discrepancy.

Unknown-333/designing-backfills-and-replays

Plan and run safe data backfills and replays — idempotent reprocessing of historical windows, partition-by-partition execution, isolating backfill compute from production, verifying results, and avoiding double-counting or changed history. Use when backfilling a new or fixed model, reprocessing after a bug, replaying events, or loading history for a new pipeline without corrupting existing data.

Unknown-333/designing-data-contracts

Define and enforce data contracts between producers and consumers — explicit schema, semantics, ownership, SLAs, and versioning — to prevent silent upstream changes from breaking downstream pipelines. Use when a producer schema change could break consumers, defining an interface between teams/services and the warehouse, or adding schema enforcement at ingestion.

Skills associés