CommunityPesquisa e Análise de Dadosgithub.com

Criação de Consumidores Kafka

Construa consumidores e produtores Apache Kafka confiáveis — grupos de consumidores e atribuição de partições, estratégia de commit de offsets, garantia de entrega pelo menos uma vez vs exatamente uma vez, produtores idempotentes/transacionais, rebalanceamento e tratamento de mensagens mortas. Use ao escrever consumidores/produtores Kafka, configurar commits de offsets ou grupos de consumidores, ajustar throughput ou lidar com rebalanceamentos e mensagens venenosas.

O que é Criação de Consumidores Kafka?

Esta skill fornece orientação abrangente para construir consumidores e produtores Apache Kafka robustos. Ela abrange decisões críticas de design, como estratégias de commit de offsets (após processamento para evitar perda de dados), dimensionamento de partições para limitar o paralelismo do grupo de consumidores e a implementação de sinks idempotentes para lidar com a semântica de 'pelo menos uma vez'. A skill também aborda o tratamento de rebalanceamentos de grupo de consumidores, destacando a necessidade de comitar offsets na revogação e manter intervalos de `poll()` dentro dos limites para evitar que o consumidor seja removido pelo broker. Por fim, ela oferece padrões práticos para lidar com mensagens venenosas, roteando-as para tópicos de mensagens mortas, garantindo que registros corrompidos não bloqueiem partições inteiras.

Funciona com~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 Pesquisa e Análise de Dados skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Construção de Consumidores Kafka

Quando usar

  • Escrevendo ou depurando consumidores/produtores Kafka.
  • Escolhendo estratégia de commit de offsets e garantias de entrega.
  • Ajustando paralelismo de grupo de consumidores, rebalanceamento ou tratamento de mensagens mortas.
  • NÃO use para processamento de streams/janelas (use processing-streaming-data).

Fluxo de Trabalho

- [ ] Dimensione partições para o paralelismo alvo (consumidores <= partições)
- [ ] Comite offsets APÓS o processamento bem-sucedido
- [ ] Torne o sink idempotente (upsert por chave do evento)
- [ ] Lide com rebalanceamentos (comite na revogação, evite longos intervalos de poll)
- [ ] Roteie mensagens venenosas para um tópico de mensagens mortas
  1. Partições limitam o paralelismo. Um grupo de consumidores escala apenas até a quantidade de partições; consumidores extras ficam ociosos. Escolha partições para o pico de throughput.
  2. Comite após o processamento. Comite offsets assim que o trabalho for concluído de forma durável, não antes — comitar cedo perde mensagens em caso de falha.
  3. Sink idempotente. 'Pelo menos uma vez' significa duplicatas em retentativas; upsert por uma chave de evento estável para que o reprocessamento seja inofensivo.
  4. Rebalanceamentos acontecem. Comite na revogação da partição e mantenha intervalos de poll() abaixo de max.poll.interval.ms para que o broker não remova o consumidor.
  5. Mensagens venenosas vão para um tópico de mensagens mortas com o erro, para que um registro ruim não bloqueie a partição.

Padrões

Commit manual após o processamento:

consumer = KafkaConsumer("orders", group_id="etl",
                         enable_auto_commit=False,
                         max_poll_records=500)
for msg in consumer:
    try:
        upsert(process(msg))          # idempotente por chave
        consumer.commit()             # comite apenas após sucesso
    except PoisonError:
        send_to_dlq(msg)
        consumer.commit()             # pule o registro ruim

Produtor idempotente / transacional — defina enable.idempotence=true (remove duplicatas de retentativas) e use transações para leitura-processamento-escrita exatamente uma vez entre tópicos.

Ajuste de throughput — aumente max.poll.records, fetch.min.bytes e processe em lotes; mantenha o processamento rápido para evitar remoção por rebalanceamento.

Armadilhas comuns

  • Auto-commit + processamento lento — offsets avançam antes da conclusão do trabalho; uma falha descarta mensagens. Prefira commit manual após o processamento.
  • Mais consumidores que partições — os extras ficam ociosos; reparticione para escalar.
  • Processamento longo entre polls — excede max.poll.interval.ms e dispara rebalanceamentos infinitos; processe em lotes limitados ou use um worker em segundo plano.
  • Sem caminho para mensagens mortas — uma mensagem venenosa bloqueia toda a partição.
  • Depender de exatamente uma vez sem sink idempotente — qualquer etapa de 'pelo menos uma vez' reintroduz duplicatas.

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.

Habilidades Relacionadas