Zpět na domů

Okno bezpečnosti Kafka: monitorování retention

Článek popisuje řešení problému ztráty dat v Kafka kvůli dominanci retention.bytes nad retention.ms. Implementace metriky Data Safety Window na bázi PromQL umožňuje monitorovat skutečné stáří dat a nastavovat alerting. Případ zahrnuje capacity planning a ladění bez dalších zdrojů.

Kafka bez ztrát: okno retention a alerting
Advertisement 728x90

Prevence ztráty dat v Kafce: implementace bezpečnostního okna a monitorování retence

V Kafce mohou být data smazána dříve, než je nastavený čas uchování, kvůli prioritě limitu objemu nad časem retence. Pokud je retention.ms = 7 dní a retention.bytes na oddíl, během špiček se témata naplní za 20–30 minut, což zkracuje životnost zpráv na 25 minut. To vede k nevratné ztrátě dat, když jsou spotřebitelé zastaveni na údržbu déle než tento interval.

Standardní nastavení – replication factor 3, min.insync.replicas 2 – nepomohou, pokud se byte-limit spustí jako první. Ve vysoce zatížených systémech objem transakcí převáží time-based retention.

Výpočet skutečného okna ukládání

Pro odhad skutečného času dostupnosti dat se zavádí metrika Data Safety Window. Vzorec vypočítává časovou rezervu na základě aktuálních offsetů a rychlosti příjmu:

Google AdInline article slot
(Current_Offset - Oldest_Offset) / Message_Ingestion_Rate

V Grafana se to implementuje PromQL dotazem:

(
  sum(kafka_topic_partition_current_offset{group="$cluster", topic=~"$topic"}) 
  - 
  sum(kafka_topic_partition_oldest_offset{group="$cluster", topic=~"$topic"})
) 
/ 
  sum(rate(kafka_topic_partition_current_offset{group="$cluster", topic=~"$topic"}[1h]))

Vysvětlení:

  • Čitatel: Rozdíl mezi current_offset (poslední zpráva) a oldest_offset (nejstarší nesmazaná zpráva) – celkový počet uchovávaných zpráv.
  • Jmenovatel: Rychlost zápisu za hodinu – intenzita toku dat.
  • Výsledek: Čas v sekundách (automaticky převedeno na hodiny/dny), ekvivalentní aktuální rezervě disku při současné zátěži.

Zóny upozorňování podle stáří dat

Monitorování je nastaveno s barevným kódováním pro rychlou reakci:

Google AdInline article slot
  • Zelená (>12 hodin): Čas na obnovu spotřebitelů bez rizika.
  • Žlutá (<6 hodin): Vyžaduje pozornost, blíží se termín.
  • Červená (<2 hodiny): Kritické, data jsou na hranici smazání.

Graf ukazuje výkyvy: špičky až 6,94 dní při stabilním toku, propady k nule při agresivním čištění kvůli retention.bytes. To odhaluje zranitelnosti včas.

Plánování kapacity a ladění konfigurace

Řešení kombinuje přepočet limitů a monitorování bez dodatečného hardwaru:

  • Výpočet kapacity: Maximální objem pro témata s 20% rezervou pro operační systém a úlohy na pozadí.
  • Bodové ladění: Zvýšení retention.bytes pouze pro kritická témata s vysokým provozem.
  • Zabránění přetečení: Zachování byte-limitů pro stabilitu brokerů.

Standardní metriky (consumer lag, disk usage) jsou doplněny retention age – klíčovým ukazatelem pro byznys: kolik času je na opravu při výpadku.

Google AdInline article slot

Co je důležité

  • Byte-limit často převáží nad time-limit během špiček, zkracuje retenci na minuty.
  • Data Safety Window = (current - oldest offset) / ingestion rate – přímý odhad časové rezervy.
  • Upozorňování podle zón (>12h/6h/2h) dělá monitorování akčnějším pro on-call inženýry.
  • Ladění retention.bytes bodově + kapacita s rezervou předchází ztrátě dat bez škálování.
  • Zaměření na skutečné stáří dat místo % disku urychluje reakci.

Výhody proaktivního přístupu

Zavedení eliminuje ztrátu dat při plánovaných pracích. Dashboard Grafana zobrazuje dynamiku v reálném čase, umožňující předpovídat propady. Během špiček se okno smršťuje, ale upozornění dávají 10+ minut na reakci – dost na obnovu.

Pro middle/senior devops: integrujte tuto metriku do existujících panelů. Vzorec je univerzální pro jakékoli clustery s PromQL. Testujte na stagingu s umělými špičkami provozu.

— Editorial Team

Advertisement 728x90

Číst dál