AnvÀndning av Clickhouse som ersÀttning för ELK, BigQuery och TimescaleDB.

Clickhouse Àr ett kolumnbaserat databashanteringssystem för onlineanalysfrÄgor (OLAP) med öppen kÀllkod, utvecklat av Yandex. Det anvÀnds av Yandex, CloudFlare, VK.com, Badoo och andra tjÀnster vÀrlden över för att lagra verkligt stora datamÀngder (insÀttningar av tusentals rader per sekund eller petabyte av data lagrade pÄ disk).

I en vanlig, "radbaserad" databashanterare, exempelvis MySQL, Postgres, MS SQL Server, lagras data i följande ordning:

AnvÀndning av Clickhouse som ersÀttning för ELK, BigQuery och TimescaleDB.

HÀr lagras vÀrden som tillhör en rad fysiskt nÀra varandra. I kolumnbaserade databashanterare lagras vÀrden frÄn olika kolumner separat, och data frÄn en kolumn lagras tillsammans:

AnvÀndning av Clickhouse som ersÀttning för ELK, BigQuery och TimescaleDB.

Exempel pÄ kolumnbaserade databashanterare inkluderar Vertica, Paraccel (Actian Matrix, Amazon Redshift), Sybase IQ, Exasol, Infobright, InfiniDB, MonetDB (VectorWise, Actian Vector), LucidDB, SAP HANA, Google Dremel, Google PowerDrill, Druid, kdb+.

Företag – e-post vidarebefordrare Qwintry började anvĂ€nda Clickhouse 2018 för att skapa rapporter och blev mycket imponerad av dess enkelhet, skalbarhet, SQL-stöd och hastighet. Denna databashanterares hastighet grĂ€nsade till magi.

Enkelhet

Clickhouse installeras pÄ Ubuntu med en enda kommando. Om du kÀnner till SQL kan du omedelbart börja anvÀnda Clickhouse för dina behov. Men det betyder inte att du kan utföra "show create table" i MySQL och kopiera och klistra in SQL i Clickhouse.

JÀmfört med MySQL finns det viktiga skillnader i datatyper i tabellschema ddefinitionerna i denna databashanterare, sÄ för bekvÀm anvÀndning kommer du att behöva lite tid att Àndra definitionerna av tabellscheman och studera tabellmotorer.

Clickhouse fungerar utmÀrkt utan nÄgon ytterligare programvara, men om du vill anvÀnda replikering mÄste du installera ZooKeeper. Prestandaanalysen av frÄgor visar utmÀrkta resultat - systemtabeller innehÄller all information och all data kan hÀmtas med hjÀlp av gammaldags och trÄkig SQL.

Performance

  • Benchmark jĂ€mförelser av Clickhouse med Vertica och MySQL pĂ„ en serverkonfiguration: tvĂ„ socklar IntelÂź XeonÂź CPU E5-2650 v2 @ 2.60GHz; 128 GiB RAM; md RAID-5 pĂ„ 8 6TB SATA HDD, ext4.
  • Benchmark jĂ€mförelser av Clickhouse med Amazon RedShift molndatalager.
  • Utdrag frĂ„n Cloudflare-bloggen om Clickhouses prestanda om Clickhouses prestanda:

AnvÀndning av Clickhouse som ersÀttning för ELK, BigQuery och TimescaleDB.

ClickHouse-databasen har en mycket enkel design — alla noder i klustret har samma funktionalitet och anvĂ€nder endast ZooKeeper för samordning. Vi byggde ett litet kluster med flera noder och genomförde tester, dĂ€r vi upptĂ€ckte att systemet har en ganska imponerande prestanda som motsvarar de pĂ„stĂ„dda fördelarna i benchmark-tester av analytiska databaser. Vi beslutade oss för att titta nĂ€rmare pĂ„ konceptet bakom ClickHouse. Det första hindret för vĂ„ra studier var avsaknaden av verktyg och det begrĂ€nsade ClickHouse-communityt, sĂ„ vi grĂ€vde djupare in i designen av denna databashanterare för att förstĂ„ hur den fungerar.

ClickHouse stödjer inte direkt mottagning av data frĂ„n Kafka, eftersom det bara Ă€r en databas, sĂ„ vi skrev vĂ„r egen adaptertjĂ€nst i Go. Den lĂ€ste de kodade Cap’n Proto-meddelanden frĂ„n Kafka, konverterade dem till TSV och infogade dem i ClickHouse i block via HTTP-grĂ€nssnittet. Senare omskrev vi den hĂ€r tjĂ€nsten för att anvĂ€nda Go-biblioteket tillsammans med vĂ„rt eget ClickHouse-grĂ€nssnitt för att förbĂ€ttra prestandan. NĂ€r vi utvĂ€rderade prestandan för paketmottagning upptĂ€ckte vi en viktig sak – det visade sig att ClickHouse-prestandan Ă€r starkt beroende av pakets storlek, det vill sĂ€ga antalet samtidigt infogade rader. För att förstĂ„ varför detta hĂ€nder, studerade vi hur ClickHouse lagrar data.

Den primÀra motorn, eller snarare, familjen av motorer för tabeller som anvÀnds av ClickHouse för att lagra data Àr MergeTree. Denna motor Àr konceptuellt lik LSM-algoritmen som anvÀnds i Google BigTable eller Apache Cassandra, men undviker att bygga en mellanliggande minnestabell och skriver data direkt till disken. Detta ger den utmÀrkt skrivbandbredd, eftersom varje infogat paket sorteras endast efter "primÀrnyckeln" primary key, komprimeras och skrivs till disken för att bilda ett segment.

Avsaknaden av minnestabeller eller nĂ„got begrepp om "fĂ€rskhet" av data innebĂ€r ocksĂ„ att de endast kan lĂ€ggas till, medan systemet inte stöder Ă€ndring eller borttagning. Idag Ă€r det enda sĂ€ttet att ta bort data att ta bort dem mĂ„nadsvis, eftersom segment aldrig korsar mĂ„nadens grĂ€ns. ClickHouse-teamet arbetar aktivt med att göra denna funktion konfigurerbar. Å andra sidan gör detta skrivning och sammanslagning av segment konfliktfritt, vilket gör att bandbredden för insamling skalar linjĂ€rt med antalet parallella insĂ€ttningar, sĂ„ lĂ€nge det inte sker mĂ€ttnad av I/O eller kĂ€rnor.
Men denna omstÀndighet innebÀr ocksÄ att systemet inte Àr lÀmpat för smÄ paket, sÄ Kafka-tjÀnster och insÀttare anvÀnds för buffring. Dessutom fortsÀtter ClickHouse konstant att utföra sammanslagning av segment i bakgrunden, sÄ att mÄnga smÄ delar av information kommer att slÄs samman och skrivas flera gÄnger, vilket ökar intensiteten i skrivningen. Samtidigt kan för mÄnga osammanhÀngande delar leda till aggressiv dÀmpning av insÀttningar sÄ lÀnge sammanslagningen pÄgÄr. Vi har upptÀckt att den bÀsta kompromissen mellan realtidsdata och prestanda för mottagning Àr att ta emot ett begrÀnsat antal insÀttningar per sekund i tabellen.

Nyckeln till lÀsprestanda för tabeller Àr indexering och datas placering pÄ disken. Oavsett hur snabbt bearbetningen Àr, nÀr motorn behöver skanna terabyte av data pÄ disken och anvÀnda endast en del av dem, kommer det att ta tid. ClickHouse Àr ett kolumnar datalager, sÄ varje segment innehÄller en fil för varje kolumn med sorterade vÀrden för varje rad. DÀrför kan hela kolumner som inte ingÄr i frÄgan först hoppas över och sedan kan flera celler bearbetas parallellt med vektoriserad exekvering. För att undvika fullstÀndig skanning har varje segment en liten indexfil.

Med tanke pÄ att alla kolumner Àr sorterade efter "primÀrnyckeln", innehÄller indexfilen endast etiketter (fÄngade rader) av varje N:e rad för att kunna lagra dem i minnet Àven för mycket stora tabeller. Till exempel kan standardinstÀllningen "markera var 8192:e rad" stÀllas in, dÄ kommer "fattig" indexering av en tabell med 1 biljon rader, som enkelt fÄr plats i minnet, att ta endast 122 070 tecken.

Utveckling av systemet

Utvecklingen och förbÀttringen av Clickhouse kan spÄras pÄ Github-repo och man kan se att "tillvÀxtprocessen" sker i imponerande takt.

AnvÀndning av Clickhouse som ersÀttning för ELK, BigQuery och TimescaleDB.

Popularitet

Det verkar som om populariteten för Clickhouse vÀxer exponentiellt, sÀrskilt inom den rysktalande gemenskapen. Förra Ärets konferens High Load 2018 (Moskva, 8-9 november 2018) visade att monster som vk.com och Badoo anvÀnder Clickhouse, med hjÀlp av vilken de matar in data (till exempel loggar) frÄn tiotusentals servrar samtidigt. I en 40-minuters video Juri Nasretdinov frÄn VKontaktegruppen pratar om hur detta görs. Snart kommer vi att publicera transkriptionen pÄ Habr för att underlÀtta arbetet med materialet.

AnvÀndningsomrÄden

Efter att ha lagt ner lite tid pÄ undersökningar tror jag att det finns omrÄden dÀr ClickHouse kan vara anvÀndbart eller kan helt ersÀtta andra, mer traditionella och populÀra lösningar som MySQL, PostgreSQL, ELK, Google Big Query, Amazon RedShift, TimescaleDB, Hadoop, MapReduce, Pinot och Druid. Nedan följer detaljer om anvÀndning av ClickHouse för att modernisera eller helt ersÀtta ovanstÄende databashanterare.

Utökning av MySQL och PostgreSQL

För inte sÄ lÀnge sedan delvis ersatte vi MySQL med ClickHouse för plattformen för nyhetsbrev Mautic nyhetsbrevProblemet var att MySQL pÄ grund av en dÄligt genomtÀnkt design registrerade varje skickat mejl och varje lÀnk i detta mejl med en base64-hash, vilket skapade en enorm MySQL-tabell (email_stats). Efter att ha skickat ut 10 miljoner mejl till abonnenterna upptog denna tabell 150 GB diskutrymme, och MySQL började "sakta ner" vid enkla förfrÄgningar. För att ÄtgÀrda problemet med diskutrymmet anvÀnde vi framgÄngsrikt InnoDB-tabellkomprimering, vilket minskade storleken med fyra gÄnger. Men det Àr fortfarande meningslöst att lagra mer Àn 20-30 miljoner e-postmeddelanden i MySQL endast för att lÀsa historik, eftersom varje enkel förfrÄgan som av nÄgon anledning mÄste göra en fullstÀndig genomsökning leder till swap och en stor belastning pÄ I/O, vilket vi regelbundet fick varningar om frÄn Zabbix.

AnvÀndning av Clickhouse som ersÀttning för ELK, BigQuery och TimescaleDB.

Clickhouse anvÀnder tvÄ komprimeringsalgoritmer som minskar datamÀngden med ungefÀr 3-4 gÄnger, men i detta specifika fall var datan sÀrskilt "komprimerbar".

AnvÀndning av Clickhouse som ersÀttning för ELK, BigQuery och TimescaleDB.

ErsÀttning av ELK

Enligt egen erfarenhet krÀver ELK-stacken (ElasticSearch, Logstash och Kibana, i detta specifika fall ElasticSearch) mycket mer resurser för att köra Àn vad som verkligen behövs för att lagra loggar. ElasticSearch Àr en utmÀrkt motor om du behöver bra fulltextsökning i loggar (och jag tror inte att du verkligen behöver det), men jag undrar varför det de facto har blivit standardmotorn för loggning. Dess abonnemangsbandbredd tillsammans med Logstash skapade problem för oss Àven vid ganska smÄ belastningar och krÀvde att vi la till allt mer RAM och diskutrymme. Som databas Àr Clickhouse bÀttre Àn ElasticSearch av följande skÀl:

  • Stöd för SQL-dialekt;
  • BĂ€ttre komprimeringsgrad för lagrad data;
  • Stöd för regex-sökning istĂ€llet för fulltextsökning;
  • FörbĂ€ttrad förfrĂ„gningsplanering och högre total prestanda.

För nÀrvarande Àr det största problemet som uppstÄr vid jÀmförelse av ClickHouse med ELK bristen pÄ lösningar för loggutdelning, samt bristen pÄ dokumentation och utbildningsmaterial om Àmnet. Samtidigt kan varje anvÀndare stÀlla in ELK med hjÀlp av Digital Oceans guide, vilket Àr mycket viktigt för snabb implementering av sÄdana teknologier. HÀr finns en databasmotor, men Àn sÄ lÀnge finns det ingen Filebeat för ClickHouse. Ja, det finns fluentd och systemet för att arbeta med loggar loghouse, finns det ett verktyg clicktail för att föra in loggfilers data i ClickHouse, men allt detta tar mer tid. Men ClickHouse Àr trots allt ledande pÄ grund av sin enkelhet, sÄ Àven nybörjare kan enkelt installera det och börja anvÀnda det fullt ut bokstavligen inom 10 minuter.

Genom att föredra minimalistiska lösningar försökte jag anvÀnda FluentBit, ett verktyg för att exportera loggar med mycket lÄg minnesanvÀndning, tillsammans med ClickHouse, och försökte undvika att anvÀnda Kafka. Men det behövs ÄtgÀrdas vissa mindre kompatibilitetsproblem, som datumformatproblem, innan detta kan göras utan ett proxy-lager som konverterar data frÄn FluentBit till ClickHouse.

Som alternativ till Kibana kan ClickHouse anvÀndas som backend Grafana. SÄvitt jag förstÄr kan det uppstÄ prestandaproblem vid rendering av stora datamÀngder, sÀrskilt med Àldre versioner av Grafana. Vi har Ànnu inte provat detta pÄ Qwintry, men klagomÄl om detta dyker tidsenligt upp pÄ ClickHouse-supportkanalen i Telegram.

ErsÀttning för Google Big Query och Amazon RedShift (lösning för stora företag)

Den perfekta anvÀndningen av BigQuery Àr att ladda upp 1 TB JSON-data och utföra analytiska frÄgor pÄ dem. BigQuery Àr en fantastisk produkt vars skalbarhet Àr svÄr att överskatta. Det Àr mycket mer komplex mjukvara Àn ClickHouse, som körs pÄ intern kluster, men ur kundens perspektiv har det mycket gemensamt med ClickHouse. BigQuery kan snabbt "bli dyrt" sÄ snart du börjar betala per SELECT, sÄ det Àr en verklig SaaS-lösning med alla dess fördelar och nackdelar.

ClickHouse Àr det bÀsta valet om du kör mÄnga resurskrÀvande frÄgor. Ju fler SELECT-frÄgor du kör varje dag, desto mer meningsfullt Àr det att byta ut BigQuery mot ClickHouse, eftersom en sÄdan byte kan spara dig tusentals dollar nÀr det gÀller mÄnga terabyte av bearbetade data. Detta gÀller inte för lagrad data, vars bearbetning i BigQuery Àr ganska billig.

I artikeln av Altinities medgrundare Alexander Zaitsev "ÖvergĂ„ngen till ClickHouse" beskrivs fördelarna med en sĂ„dan databasövergĂ„ng.

ErsÀttning för TimescaleDB

TimescaleDB Àr en utvidgning av PostgreSQL som optimerar arbetet med tidsserier i en vanlig databashttps://docs.timescale.com/v1.0/introduction, https://habr.com/ru/company/zabbix/blog/458530/).

Även om ClickHouse inte Ă€r en seriös konkurrent inom tidsserieomrĂ„det, Ă€r det mycket snabbare Ă€n TimescaleDB för de flesta analytiska förfrĂ„gningar tack vare sin kolumnstruktur och vektoriserade frĂ„geexekvering. Dessutom Ă€r ClickHouse:s prestanda för att ta emot batchdata cirka tre gĂ„nger bĂ€ttre, och den anvĂ€nder dessutom 20 gĂ„nger mindre lagringsutrymme, vilket Ă€r avgörande för hantering av stora mĂ€ngder historiska data:https://www.altinity.com/blog/ClickHouse-for-time-series.

Till skillnad frÄn ClickHouse Àr det enda sÀttet att spara lite lagringsutrymme i TimescaleDB att anvÀnda ZFS eller liknande filsystem.

Framtida uppdateringar av ClickHouse kommer förmodligen att införa delta-kompression som gör det Ànnu mer lÀmpligt för att hantera och lagra tidsseriedata. TimescaleDB kan vara det bÀttre valet Àn "rena" ClickHouse i följande fall:

  • smĂ„ installationer med mycket lite RAM (<3 GB);
  • ett stort antal smĂ„ INSERT-operationer som du inte vill buffra i stora block;
  • bĂ€ttre konsekvens, enhetlighet och ACID-krav;
  • stöd för PostGIS;
  • integration med befintliga PostgreSQL-tabeller, eftersom TimescaleDB i huvudsak Ă€r PostgreSQL.

Konkurrens med Hadoop och MapReduce

Hadoop och andra MapReduce-produkter kan utföra mÄnga komplexa berÀkningar, men de verkar vanligtvis med enorma fördröjningar. ClickHouse löser detta problem genom att bearbeta terabyte av data och nÀstan omedelbart producera resultat. DÀrför Àr ClickHouse mycket effektivare för att utföra snabb, interaktiv analytisk forskning, vilket bör intressera databehandlingsspecialister.

Konkurrens med Pinot och Druid

De nÀrmaste konkurrenterna till ClickHouse Àr kolumnar linjÀrt skalbara open source-produkter som Pinot och Druid. UtmÀrkt arbete med att jÀmföra dessa system publicerades i artikeln Roman Leventov den 1 februari 2018.

AnvÀndning av Clickhouse som ersÀttning för ELK, BigQuery och TimescaleDB.

Denna artikel behöver uppdateras – den pĂ„stĂ„r att ClickHouse inte stöder UPDATE och DELETE-operationer, vilket inte Ă€r helt korrekt i förhĂ„llande till de senaste versionerna.

Vi har inte tillrĂ€cklig erfarenhet av att arbeta med dessa databashanteringssystem, men jag gillar verkligen inte komplexiteten hos den infrastruktur som krĂ€vs för att köra Druid och Pinot – det Ă€r en hel del "rörliga delar" omgiven av Java frĂ„n alla hĂ„ll.

Druid och Pinot Ă€r inkubatorprojekt inom Apache, vars utvecklingsförlopp detaljerat belyses av Apache pĂ„ sina GitHub-projekt. Pinot debuterade i inkubatorn i oktober 2018, medan Druid föddes Ă„tta mĂ„nader tidigare – i februari.

Bristen pÄ information om hur AFS fungerar vÀcker nÄgra, och kanske fÄniga, frÄgor hos mig. Jag undrar om författarna till Pinot har mÀrkt att Apache Foundation Àr mer gynnsam mot Druid, och om denna instÀllning till konkurrenten har orsakat nÄgon form av avundsjuka? Kommer Druid att bromsa sin utveckling medan Pinot snabbt gÄr framÄt, om sponsorerna som stödjer den förra plötsligt blir intresserade av den senare?

Nackdelar med ClickHouse

Omoget: det Àr uppenbart att det fortfarande Àr en fascinerande teknik, men det finns ÀndÄ ingenting liknande i andra kolumnbaserade databashanteringssystem.

SmĂ„ insĂ€ttningar fungerar dĂ„ligt med hög hastighet: insĂ€ttningar mĂ„ste delas upp i större bitar, eftersom prestandan för smĂ„ insĂ€ttningar minskar i proportion till antalet kolumner i varje rad. SĂ„ hĂ€r lagras data i ClickHouse pĂ„ disken – varje kolumn motsvarar en eller flera filer, sĂ„ för att infoga en rad som innehĂ„ller 100 kolumner mĂ„ste minst 100 filer öppnas och skrivas. DĂ€rför krĂ€vs en medlare för att buffra insĂ€ttningar (om inte sjĂ€lva klienten tillhandahĂ„ller buffring) – vanligtvis Ă€r det Kafka eller nĂ„got köhanteringssystem. Man kan ocksĂ„ anvĂ€nda Buffer table-motorn för att senare kopiera stora datasegment till MergeTree-tabeller.

Tabellanslutningar begrÀnsas av serverns arbetsminne, men Ätminstone finns de dÀr! Till exempel finns det inga sÄdana anslutningar i Druid och Pinot, eftersom de Àr svÄra att implementera direkt i distribuerade system som inte stödjer överföring av stora datamÀngder mellan noder.

Slutsatser

Under de kommande Ären planerar vi att anvÀnda ClickHouse i Qwintry i stor utstrÀckning, eftersom denna databas ger en utmÀrkt balans mellan prestanda, lÄga overheadkostnader, skalbarhet och enkelhet. Jag Àr nÀstan sÀker pÄ att den kommer att börja spridas snabbt sÄ snart ClickHouse-gemenskapen hittar fler sÀtt att anvÀnda den i smÄ och medelstora installationer.

Lite reklam 🙂

Tack för att ni stannar kvar hos oss. Gillar ni vÄra artiklar? Vill ni se fler intressanta material? Stöd oss genom att göra en bestÀllning eller rekommendera oss till era vÀnner, moln-VPS för utvecklare frÄn $4,99, en unik motsvarighet till entry-level servrar som vi har skapat för er: Allt om VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps frÄn $19 eller hur man korrekt delar en server? (alternativ med RAID1 och RAID10 finns tillgÀngliga, upp till 24 kÀrnor och upp till 40GB DDR4).

Dell R730xd Ă€r tvĂ„ gĂ„nger billigare i datacentret Equinix Tier IV i Amsterdam? Bara hos oss 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100TB frĂ„n $199 i NederlĂ€nderna! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — frĂ„n $99! LĂ€s om Hur man bygger en företagsinfrastruktur med Dell R730xd E5-2650 v4-servrar som kostar 9000 euro för en brĂ„kdel?

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster