Construcción de consumidores de Kafka

Construye consumidores y productores confiables de Apache Kafka: grupos de consumidores, asignación de particiones, estrategia de confirmación de offsets, al menos una vez vs exactamente una vez, productores idempotentes/transaccionales, rebalanceo y manejo de mensajes envenenados.

¿Qué es Construcción de consumidores de Kafka?

Esta habilidad guía a los desarrolladores en la construcción de consumidores y productores robustos de Apache Kafka, abordando decisiones críticas como la estrategia de confirmación de offsets, garantías de entrega, paralelismo de grupos de consumidores y manejo de rebalanceos. Se enfoca en prácticas como confirmar offsets solo después del procesamiento exitoso, diseñar sumideros idempotentes (upsert por clave de evento) y enrutar mensajes envenenados a un tema de mensajes muertos para evitar que un solo registro dañino bloquee toda una partición. Incluye patrones de código en Python con confirmación manual, productores idempotentes/transaccionales y consejos de optimización de rendimiento. Es útil para cualquier desarrollador que trabaje con Kafka en plataformas de agentes de IA como Claude Code, Cursor o Codex, evitando errores comunes como el auto-commit con procesamiento lento o el exceso de consumidores respecto a particiones.

Compatible con~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 Investigación y análisis de datos skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace Construcción de consumidores de Kafka?

Cuándo usar

  • Escribir o depurar consumidores/productores de Kafka.
  • Elegir estrategia de confirmación de offsets y garantías de entrega.
  • Ajustar paralelismo de grupos de consumidores, rebalanceo o manejo de mensajes envenenados.
  • NO usar para procesamiento de flujos/ventanas (usar processing-streaming-data).

Flujo de trabajo

- [ ] Dimensionar particiones según el paralelismo objetivo (consumidores <= particiones)
- [ ] Confirmar offsets DESPUÉS del procesamiento exitoso
- [ ] Hacer que el sumidero sea idempotente (upsert por clave de evento)
- [ ] Manejar rebalanceos (confirmar al revocar, evitar pausas largas en poll)
- [ ] Enrutar mensajes envenenados a un tema de mensajes muertos
  1. Las particiones limitan el paralelismo. Un grupo de consumidores escala solo hasta el número de particiones; los consumidores adicionales quedan inactivos. Elige particiones para el rendimiento máximo.
  2. Confirmar después de procesar. Confirma los offsets una vez que el trabajo está durablemente realizado, no antes — confirmar temprano pierde mensajes en un fallo.
  3. Sumidero idempotente. Al menos una vez significa duplicados al reintentar; upsert por una clave de evento estable para que el reprocesamiento sea inofensivo.
  4. Los rebalanceos ocurren. Confirma al revocar la partición y mantén los intervalos de poll() por debajo de max.poll.interval.ms para que el broker no expulse al consumidor.
  5. Mensajes envenenados van a un tema de mensajes muertos con el error, para que un registro malo no bloquee la partición.

Patrones

Confirmación manual después del procesamiento:

consumer = KafkaConsumer("orders", group_id="etl",
                         enable_auto_commit=False,
                         max_poll_records=500)
for msg in consumer:
    try:
        upsert(process(msg))          # idempotente por clave
        consumer.commit()             # confirmar solo después del éxito
    except PoisonError:
        send_to_dlq(msg)
        consumer.commit()             # saltar el registro malo

Productor idempotente / transaccional — establece enable.idempotence=true (deduplica reintentos) y usa transacciones para lectura-procesamiento-escritura exactamente una vez entre temas.

Optimización de rendimiento — aumenta max.poll.records, fetch.min.bytes, y procesa en lotes; mantén el procesamiento rápido para evitar expulsión por rebalanceo.

Errores comunes

  • Auto-commit + procesamiento lento — los offsets avanzan antes de que el trabajo se complete; un fallo pierde mensajes. Prefiere confirmación manual después del procesamiento.
  • Más consumidores que particiones — los extras quedan inactivos; reparticiona para escalar.
  • Procesamiento largo entre polls — excede max.poll.interval.ms y desencadena rebalanceos infinitos; procesa en lotes acotados o usa un trabajador en segundo plano.
  • Sin ruta de mensajes muertos — un mensaje envenenado bloquea toda la partición.
  • Confiar en exactamente una vez sin un sumidero idempotente — cualquier salto de al menos una vez reintroduce duplicados.

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 relacionados