CommunityRecherche & Datenanalysegithub.com

Building Kafka Consumers

Erstelle zuverlässige Apache Kafka Consumer und Producer – Consumer Groups, Partition-Zuweisung, Offset-Commit-Strategien, At-Least-Once vs. Exactly-Once, idempotente/transaktionale Producer, Rebalancing und Dead-Letter-Behandlung.

Was ist Building Kafka Consumers?

Diese Fähigkeit unterstützt Entwickler beim Erstellen und Optimieren von Kafka-Consumern und -Producern. Sie behandelt zentrale Aspekte wie die Wahl der Offset-Commit-Strategie, die Skalierung von Consumer-Groups (Consumer ≤ Partitionen), die Handhabung von Rebalancing-Ereignissen sowie den Umgang mit Gift-Nachrichten (Poison Messages) über Dead-Letter-Topics. Die Fähigkeit betont die Notwendigkeit idempotenter Senken (Upsert anhand eines stabilen Event-Keys), um Duplikate aus At-Least-Once-Garantien unschädlich zu machen, und bietet klare Anleitungen zur Vermeidung typischer Fehler wie Auto-Commit mit langsamer Verarbeitung oder zu viele Consumer pro Partition. Sie ist für alle gängigen Kafka-Clients (Python, Java, etc.) geeignet und enthält Code-Beispiele für manuelles Committen, idempotente Producer und Durchsatzoptimierung. Die Fähigkeit ersetzt nicht die Nutzung spezieller Stream-Processing-Fähigkeiten (z. B. `processing-streaming-data`), sondern fokussiert auf die robuste, produktionsreife Consumer/Producer-Implementierung.

Funktioniert mit~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 & Datenanalyse skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht Building Kafka Consumers?

Wann verwenden

  • Schreiben oder Debuggen von Kafka-Consumern/-Producern.
  • Auswahl der Offset-Commit-Strategie und Liefergarantien.
  • Optimieren der Consumer-Group-Parallelität, Rebalancing oder Dead-Letter-Behandlung.
  • NICHT verwenden für Stream-Processing/Fensterung (verwende processing-streaming-data).

Arbeitsablauf

- [ ] Partitionen dimensionieren, um die gewünschte Parallelität zu erreichen (Consumer ≤ Partitionen)
- [ ] Offsets NACH erfolgreicher Verarbeitung committen
- [ ] Die Senke idempotent machen (Upsert per Event-Key)
- [ ] Rebalancing behandeln (Commit bei Revoke, lange Poll-Pausen vermeiden)
- [ ] Gift-Nachrichten an ein Dead-Letter-Topic weiterleiten
  1. Partitionen begrenzen die Parallelität. Eine Consumer-Group skaliert nur bis zur Anzahl der Partitionen; zusätzliche Consumer bleiben untätig. Wähle Partitionen für den Spitzendurchsatz.
  2. Nach der Verarbeitung committen. Committe Offsets erst, wenn die Arbeit dauerhaft erledigt ist, nicht vorher – frühzeitiges Committen führt bei einem Absturz zu Nachrichtenverlust.
  3. Idempotente Senke. At-Least-Once bedeutet Duplikate bei Wiederholungen; Upsert mit einem stabilen Event-Key macht die erneute Verarbeitung unschädlich.
  4. Rebalancing tritt auf. Committe bei Partitions-Revoke und halte poll()-Intervalle unter max.poll.interval.ms, damit der Broker den Consumer nicht ausschließt.
  5. Gift-Nachrichten werden an ein Dead-Letter-Topic mit dem Fehler gesendet, sodass eine fehlerhafte Nachricht nicht die gesamte Partition blockiert.

Patterns

Manuelles Committen nach der Verarbeitung:

consumer = KafkaConsumer("orders", group_id="etl",
                         enable_auto_commit=False,
                         max_poll_records=500)
for msg in consumer:
    try:
        upsert(process(msg))          # idempotent per Key
        consumer.commit()             # nur bei Erfolg committen
    except PoisonError:
        send_to_dlq(msg)
        consumer.commit()             # fehlerhafte Nachricht überspringen

Idempotenter / transaktionaler Producer – setze enable.idempotence=true (dedupliziert Wiederholungen) und verwende Transaktionen für Read-Process-Write Exactly-Once über Topics hinweg.

Durchsatzoptimierung – erhöhe max.poll.records, fetch.min.bytes und verarbeite in Batches; halte die Verarbeitung schnell, um Rebalancing-Ausschluss zu vermeiden.

Häufige Fallstricke

  • Auto-Commit + langsame Verarbeitung – Offsets werden fortgeschrieben, bevor die Arbeit abgeschlossen ist; ein Absturz verliert Nachrichten. Bevorzuge manuelles Committen nach der Verarbeitung.
  • Mehr Consumer als Partitionen – die zusätzlichen bleiben untätig; partitioniere neu, um zu skalieren.
  • Lange Verarbeitungszeit zwischen Polls – überschreitet max.poll.interval.ms und löst endlose Rebalancings aus; verarbeite in begrenzten Batches oder verwende einen Hintergrund-Worker.
  • Kein Dead-Letter-Pfad – eine Gift-Nachricht blockiert die gesamte Partition.
  • Auf Exactly-Once ohne idempotente Senke verlassen – jeder At-Least-Once-Schritt führt Duplikate wieder ein.

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.

Verwandte Skills