Vývoj

(Naše) Tři největší faily v Apache Kafka

Miroslav Juhos

Vývoj

Aneb chybami se člověk učí.

Message brokery jsou hit, který zacloumal vývojem aplikací. Data uložená v prosté tabulce dostala časovou rovinu. "Malým bonusem" ale byla potřeba změnit způsob myšlení, jelikož aplikace dnes není jen pouhý průtokový ohřívač na data, který se snaží co nejrychleji dostat data z bodu A do databáze. Srdce našeho týmu si získala Apache Kafka a já bych vám rád popsal, jak se nám ho třikrát pokusila zlomit.

Fail první aneb Nepoužívej Kafku v defaultním nastavení

Mám rád technologie, které chodí na první spuštění. Mám rád jazyky, které mají krátký Hello world. Mám rád mikrovlnnou troubu s dvěma knoflíky – teplota a čas. Kafka bohužel není ani jedno.

Poměrně zásadní věcí, která nám ublížila, je defaultní retence topicu. Celý týden si hrajete s Kafkou, posíláte do ní zprávy, v pondělí přijdete do práce a zpráv je v Kafce jaksi méně. A ke konci týdne, pokud neposíláte další zprávy, je v Kafce zoufale prázdno. Ano retence zpráv je defaultně sedm dní. 


Hello world: Ukázkový program s výstupem "Hello world", na jehož základě vývojář získá pocit, že jazyku rozumí;.

Retence: Doba, po kterou je zpráva udržována v Kafce, než se ztratí na smetišti dějin.

Default: Přednastavená hodnota, občas na nesmyslné hodnotě. To vše za účelem zvýšení ostražitosti.


Fail druhý aneb Jak se Kafky sdružují

Hurá, nasazujeme Kafku na stage, všechno chodí a svět je růžový a béžový.

Jenže ejhle, naše zprávy se sice odesílají, ale v Kafce nejsou. A co víc, objevují se tam topicy jiného týmu. Vypuká u nás panika, naše naděje vložené do moderního technologického řešení se rozplývají – chodí to, ale neseje to. To jsme ještě netušili, že v tom druhém týmu nálada vypadá podobně. Když skončilo osočování na téma "co nám lezete do naší Kafky", bylo na čase to pořešit.

Objevili jsme v ní vlastnost, o které jsme do té doby neměli ani tuchy. Kafku jsme nasadili do Kubernetes a ona si tam spokojeně běžela. Druhý tým ji taky nasadil a tam si taky spokojeně vrněla. Každá Kafka měla svůj broker a ten při posílání zpráv spokojeně a úspěšně zprávy přijímal.

Jenže pak někdo udělal redeploy a došlo k nasazení na stejný kubernetí node. A ejhle, Kafka spojila brokery do jednoho clusteru a už oba týmy posílají zprávy do jednoho pytle. Naše štěstí bylo, že ji testovaly dva týmy, takže tahle skrytá funkce měla šanci se projevit.

Dodnes mne jímá hrůza, když si vzpomenu, že se tohle mohlo stát třeba až za rok – a na produkci. Brr.


Stage: prostředí, na němž vývojáři testují aplikace a o němž tiše předpokládají, že se chová stejně jako prostředí produkční.

Topic: Kafka uspořádává zprávy do jakýchsi kanálů nazývaných topic.

Broker: Vstupní bod Kafky, dává nám k dispozici URL, ke kterému se připojují aplikace pracující s Kafkou.

Kubernetes: Šelmostroj, na které běží naše aplikace.

Cluster: Skupina spolupracujících počítačů či aplikací, táhnoucích za jeden provaz (většinou stejným směrem).

Kubernetí node: Fyzický stroj ze serverového clusteru (který je možná také virtuální). 


Fail třetí aneb Vybírej a prověřuj

Pokud existuje v Kafce entita, která konzumuje zprávy, transformuje je a opět odešle (do jiného topicu), přezdívá se jí procesor. Jelikož píšeme v Pythonu, toužebně jsme pokukovali po javovské knihovně Streams (Streams jsou totiž ideální pro zpracování zpráv z Kafky). Leč pouze pokukovali. Pro Streams žádná knihovna v Pythonu neexistuje.

Nabízelo se řešení napsat consumer, zpracovat data a producerem je publikovat. Funkční. Leč narazili jsme na knihovnu, která slibovala regulérní processing ve stylu Kafka Streams. Aspoň se nám vývojáři v Javě nebudou smát.

A nyní si můžeme vyjmenovat všechny potíže které jsme si způsobili:

  • Pokud zadáte do Google "Kafka Faust", skončíte s největší pravděpodobností na literárním fóru.
  • Faust má touto dobou na Githubu 80 contributorů – pro srovnání Kafka má 820.
  • Dokumentace, která se čte jednou, dvakrát. Pak vyzkoušíte nějaký postup a znovu čtete dokumentaci a hledáte a hledáte. Úsilí rozběhnout něco víc než example bylo enormní.
  • Blog projektu Faust utichl stejně jako nové release.

Co z toho plyne za poučení?

  • Prověřujte si knihovny a frameworky, které přidáváte do projektu.
  • Bez srozumitelné dokumentace je knihovna k ničemu.

Sorry Fauste, ale po tom, co jsme si s tebou užili, to raději zvládneme bez tebe.


Producer: Aplikace, která odesílá zprávy do Kafky.

Consumer: Aplikace, která čeká, až Kafka doručí zprávu, aby ji mohl zpracovat.

Release: Aplikace, o níž se vývojář domnívá, že bezchybně funguje.

Java: Programovací jazyk, o kterém si valná většina vývojářů myslí, že ho zná, ale jen menšina z nich se tím živí.

Autor článku

Miroslav "Juhy" Juhos je profesionální vývojář a amatérský hudebník, byť se občas chová jako by to bylo naopak. Pracuje tu víc než čtyři roky a zabývá se vývojem aplikací pro platební systémy v Heurece v Pythonu.

Podobné články

Ikony bez kompromisů

Ikony bez kompromisů

I přes svou malou velikost představují ikony na webu zajímavý problém. Jeden přístup střídá další –…

Vánoční resuscitace serverů

Vánoční resuscitace serverů

O sysadminech v Heurece se dá říci leccos, nedostatek paranoie to ale není. Máme zdvojené téměř…

Potkejme se na WebExpu!

Potkejme se na WebExpu!

Letošní ročník konference WebExpo 2018, točící se kolem webových technologií, obohatíme i naším…

Zaber si svou židli!

<Nejsme asociálové/>

<Témata/>

Zajímá tě naše práce, technologie, tým nebo cokoliv jiného?
Napiš šéfovi vývoje Lukášovi Putnovi.

lukas.putna@heureka.cz