Názory k článku Sledování činnosti systému Apache Kafka přes JMX i metriky Promethea (dokončení)

  • Článek je starý, nové názory již nelze přidávat.
  • 24. 6. 2021 9:39

    atarist

    Trošku offtopic, ale moc by se mi líbilo porovnání Kafky a NATSu. Ano, každá ta technologie je určena pro mírně odlišné účely, ale ty účely se překrývají. A NATS má jedno velké plus - vůbec nemá centralizovanou komponentu tak, jako Kafka (zookeeper).

    Má někdo reálné zkušenosti s NATSem? Na produkci?

  • 24. 6. 2021 13:00

    M_D

    Souhlasím, že Kafka je super a neštěstí trochu je tam ten Zookeeper s nutností mít aktivní nadpoloviční počet uzlů zoo, aby to celé funfgovalo. Sice je deklarováno, že se pracuje na odstranění závislost na Zoo v Kafce, ale bude to ještě chvíli trvat. :-(
    Experimentuji s použitím Apache Ignite v roli jako Kakfy, protože tam ten Zoo není (respektive se jeho zapojení doporučuje pro lokační služby až když mám 100+ serverů) a data z Kafky se stejně braly do Ignite, tak použít pár vyhrazených keší nebo queue v Ignite jako vstupní stream (protože i ten defaultní Kafka streamer v Ignite má svoje mouchy, pokud nemám komerční verzi od GridGainu nebo nepoužiju pro Kafka->Ignite transformaci něco jiného, ať už vlastní bastl nebo Apache Spark/Flink).

  • 24. 6. 2021 13:24

    Uncaught ReferenceError:

    na zookeeper mám vyhrazené vlastní servery a používáme ho i na jiné služby než jen pro kafku. Za mě je výhoda, že se poměrně dobře provozuje, má poměrně robustní model hlasování, failoveru a jistotu zápisu.

    U kafky Confluent pracuje na KRaft jako náhradě zookeeperu, zatím se mi to ale moc nelíbí, výhoda ZAB (použitém v zk) proti raftu je "async linearizability guarantee" (netroufnu si přeložit do češtiny), zatímco u raftu končí u block-wait události a u velkých clusterů (20 a více kafka nodů) to přináší výraznější komplikace při velkých úpravách topiců a rebalancingu, mimojiné. V early access verzi zatím nemají implementované ACL, není možné event-driven replikaci monitorovat jako u zk.

    Zookeeper je v hledáčku spouště lidí kvůli složitosti na správu, přitom to považuji za škodu, že se tohle nevyladilo, aby to bylo jednodušší. Kafka se zookeeper z mojí zkušenosti je jedna z nejstabilnější technologií co používáme. KRaft ale třeba přinese zvýšení praktického limitu pro počet partitions, topiců a consumer group, což ale pro většinu nasazení není limitací.

  • 24. 6. 2021 16:35

    M_D

    Tak samotný Zoo mám rád a také provozuji na vyhrazených serverech (párově s redis-sentinel pro řízení radis HA setupu). Mám na zoo rád už jen to, že je k tomu knihovna pro C a není problém ho přímo používat z různých embedded krámů.
    Limitující v té kombinaci s Kafkou je instalace, kde mám k dispozici jen 2 lokality. A u zoo mám problém, pokud přijdu o jednu celou lokalitu, tak zbylá lokalita nebude mít majoritu a zastaví se to (když nepočítám možnost read only přístupu k zookeeperu, který je možný po povolení i když není majorita). V Kafce, Couch, Cassandra je hlasování pak per stream/dokument, takže ztráta jedné lokality v dvoulokalitní konfiguraci nevadí při vhodném nastavení, ale pro Zoo je to konečná. Pak musím řešti tak, že v každé lokalitě mám samostantou instalaci Kafka+zoo, aplikace buď zapisují naráz do dvou Kafek nebo se přepíná dle dostupnosti a ztráta jedné celé lokality se pak dá přežít, jen to komplikuje aplikace. Kde mám k dispozici víc lokalit, tak už problém není, zookeeper se mezi ně rozloží a ztráta celé jedné lokality nemá dopad.

  • 24. 6. 2021 22:51

    Uncaught ReferenceError:

    Zk ve více lokalitách je problém, jednak kvůli latency, tak i kvůli výpadku celé lokality, na tohle není navržený a je nerozumné se ho snažit ho to naučit. Takže asi jediné rozumné řešení je mít vždy v jedné lokalitě Zk + Kafku. U Kafky je pak možné mít clustery křížem.

    Z principu mi ale nikdy nevadilo omezení Kafky na jednu lokalitu, nikdy jsem neměl ambice dělat Kafku jako centralizovaný (či globální) řešení pro distribuci stavů, ale vždy to je komponenta, která je na hranici lokality a zajišťuje řádné doručení zpráv do již replikovaných systémů pro svoje ovečky.

    Pořád tady platí, že uložit něco globálně je drahé a plné rizik pro selhání, ale velice trvalé pro budoucí výpadkx, uložit něco lokálně je levné, s málo riziky, ale nedává mi to záruky při výpadku. Kafka a zk je právě ta vhodná komponenta pro to rychlé uložení lokální než se podaří stav na pozadí dostatečně zreplikovat, aby klient nemusel čekat s daty v paměti a otevrřenými spojeními příliš dlouho. Tuhle roli právě v kombinaci se zk plní velice dobře a spolehlivě, ale je to občas trochu na hlavu to správně navrhnout.

  • 25. 6. 2021 8:35

    M_D

    Jasný. Takto, spíše jsem měl říci rack aware. Neposílam celý svět do jednoho místa, spíše mám 2 až N racků v různých koutech dané fabriky a ty mám propojeny třeba 4x 100 Gbps kruhy optiky do 1,6 km, takže latence a spol jsou zanedbatelné a data jsou z pár km čtverečních. Takže je to spíše takový rozšířený lokál (a vždy zcela izolovaný od vnějšku). A kde mi dovolili jen 2 "lokality", tak se to komplikuje, když přijdu o rack, tam musím jít do toho dvoukafkového uspořádání, ke je preferováno ukládání dat klientem do obou naráz a až vrstva výše si zpracuje, aby to šlo dál už jen 1x.
    Tam zvažuji to Ignite, že dokážu fakticky udělat fronty v něm, umí to replikace i rozklad mezi víc serverů jednoho "topicu", pro nedůležité streamy klidně může jít jen o RAM only streamy bez persistence atd. Nicméně, jak jsem psal, klienta pro zoo a i pro kafku rozjedu i na embedded krámu, kde je vše C only (pravda, librdkafku jsme musel dost přepsat do hisotričtější formy z toho TLS C11), kdežto s tím Ignite to bude horší. :-)

  • 25. 6. 2021 10:14

    atarist

    Právě na toto se může hodit NATS. A možná i kombinace NATS+Kafka (kde NATS buce směrovat zprávy a Kafka bude jen storage pro topicy). Porovnání možností https://docs.nats.io/compare-nats

    (Zatím to pouze zkoumáme, máme zkušenosti s Kafkou, NATS je zatím ve fázi spiku u nás)

  • 25. 6. 2021 12:04

    M_D

    Tak ono vrstvit různé technologie nad sebe se také nemá přehánět. :-)
    U NATSu, pokud chápu, tak si proti Kafce moc nepomůžu, pokud chci spolehlivost, v tom případě musím jít směrem NATS JetStream a tam musím mít u clusteur zase majoritu dostupných uzlů, takže proti Kafka+Zoo beze změny (jen odpadá ten Zoo). Jistě, pokud použiju holý NATS cluster a publish/subscribe model, tak ten funguje do posledního běžícího kusu, ale tam už ta spolehlivost doručení při výpadku je jinde a historie dat nikde, můžu to napravovat trochu konceptem request-reply (tak to děláme tam, kde mám Mosquitto s MQTT5 v provozu, tam mám výhodu i retain zpráv a bafrování pro odpojení klienty, zase tam chybí aspoň nějaké clusterování).