Clickhouse қолданбасын ELK, Big Query және TimescaleDB үшін ауыстыру ретінде пайдалану

кликхаус Яндекс жасаған онлайн аналитикалық сұрауларды өңдеуге (OLAP) арналған ашық бастапқы дерекқорды басқару жүйесі. Оны Яндекс, CloudFlare, VK.com, Badoo және дүние жүзіндегі басқа қызметтер шынымен үлкен көлемдегі деректерді (секундына мыңдаған жолдарды немесе дискіде сақталған петабайттарды енгізу) сақтау үшін пайдаланады.

Мысалдары MySQL, Postgres, MS SQL Server болатын кәдімгі «жолдық» ДҚБЖ-да деректер келесі ретпен сақталады:

Clickhouse қолданбасын ELK, Big Query және TimescaleDB үшін ауыстыру ретінде пайдалану

Бұл жағдайда бір жолға қатысты мәндер физикалық түрде жақын жерде сақталады. Бағаналы ДҚБЖ-да әртүрлі бағандардағы мәндер бөлек сақталады, ал бір бағандағы деректер бірге сақталады:

Clickhouse қолданбасын ELK, Big Query және TimescaleDB үшін ауыстыру ретінде пайдалану

Бағаналы ДҚБЖ мысалдары Vertica, Paraccel (Actian Matrix, Amazon Redshift), Sybase IQ, Exasol, Infobright, InfiniDB, MonetDB (VectorWise, Actian Vector), LucidDB, SAP HANA, Google Dremel, Google PowerDrill, Druid, kdb+.

Экспедиторлық компания Qwintry есеп беру үшін Clickhouse-ды 2018 жылы пайдалана бастады және оның қарапайымдылығымен, масштабталатындығымен, SQL қолдауымен және жылдамдығымен таң қалдырды. Бұл ДҚБЖ жылдамдығы сиқырмен шектеседі.

жеңілдік

Clickhouse бір пәрменмен Ubuntu жүйесінде орнатылады. Егер сіз SQL тілін білсеңіз, сіз өз қажеттіліктеріңіз үшін Clickhouse қолданбасын бірден бастай аласыз. Дегенмен, бұл MySQL жүйесінде «кесте жасауды көрсету» әрекетін орындауға және Clickhouse жүйесінде SQL-ді көшіріп қоюға болады дегенді білдірмейді.

MySQL-пен салыстырғанда кесте схемасының анықтамаларында деректер түрінің маңызды айырмашылықтары бар, сондықтан кесте схемасының анықтамаларын өзгертуге және ыңғайлы болу үшін кесте қозғалтқыштарын үйренуге әлі де біраз уақыт қажет.

Clickhouse қосымша бағдарламалық жасақтамасыз тамаша жұмыс істейді, бірақ репликацияны пайдаланғыңыз келсе, ZooKeeper орнату қажет болады. Сұрау өнімділігін талдау тамаша нәтижелерді көрсетеді - жүйелік кестелер барлық ақпаратты қамтиды және барлық деректерді ескі және қызықсыз SQL арқылы алуға болады.

өнімділік

  • Эталон Clickhouse мен Vertica және MySQL сервер конфигурациясында салыстыру: екі ұяшық Intel® Xeon® CPU E5-2650 v2 @ 2.60 ГГц; 128 ГБ жедел жады; md RAID-5 8 6TB SATA HDD, ext4.
  • Эталон Clickhouse-ды Amazon RedShift бұлттық қоймасымен салыстыру.
  • Блог үзінділері Clickhouse өнімділігіндегі Cloudflare:

Clickhouse қолданбасын ELK, Big Query және TimescaleDB үшін ауыстыру ретінде пайдалану

ClickHouse дерекқорында өте қарапайым дизайн бар - кластердегі барлық түйіндердің бірдей функционалдығы бар және үйлестіру үшін тек ZooKeeper пайдаланады. Біз бірнеше түйіндерден тұратын шағын кластерді құрдық және тестілеуді жүргіздік, оның барысында жүйенің айтарлықтай әсерлі өнімділігі бар екенін анықтадық, бұл ДҚБЖ аналитикалық эталондарында көрсетілген артықшылықтарға сәйкес келеді. Біз ClickHouse концепциясын мұқият қарастыруды шештік. Зерттеуге бірінші кедергі құралдардың және шағын ClickHouse қауымдастығының болмауы болды, сондықтан біз оның қалай жұмыс істейтінін түсіну үшін осы ДҚБЖ дизайнын зерттедік.

ClickHouse тікелей Кафкадан деректерді қабылдауды қолдамайды, себебі бұл жай ғана дерекқор, сондықтан біз Go бағдарламасында өз адаптер қызметін жаздық. Ол Кафкадан Cap'n Proto кодталған хабарламаларын оқып, оларды TSV форматына түрлендірді және HTTP интерфейсі арқылы пакеттермен ClickHouse ішіне енгізді. Кейінірек өнімділікті жақсарту үшін Go кітапханасын ClickHouse интерфейсімен бірге пайдалану үшін бұл қызметті қайта жаздық. Қабылдау пакеттерінің өнімділігін бағалау кезінде біз маңызды нәрсені анықтадық - ClickHouse үшін бұл өнімділік пакеттің өлшеміне, яғни бір уақытта енгізілген жолдар санына қатты байланысты екені анықталды. Мұның неліктен орын алғанын түсіну үшін біз ClickHouse деректерді қалай сақтайтынын қарастырдық.

Мәліметтерді сақтау үшін ClickHouse пайдаланатын негізгі қозғалтқыш, дәлірек айтсақ кестелік қозғалтқыштардың тобы MergeTree болып табылады. Бұл қозғалтқыш концептуалды түрде Google BigTable немесе Apache Cassandra-да қолданылатын LSM алгоритміне ұқсас, бірақ аралық жад кестесін құрудан аулақ және деректерді тікелей дискіге жазады. Бұл оған тамаша жазу өткізу қабілетін береді, өйткені әрбір енгізілген пакет тек бастапқы кілт бойынша сұрыпталады, қысылады және сегментті қалыптастыру үшін дискіге жазылады.

Жад кестесінің немесе деректердің «жаңалығы» тұжырымдамасының болмауы оларды тек қосуға болатынын білдіреді, жүйе өзгертуді немесе жоюды қолдамайды. Қазіргі уақытта деректерді жоюдың жалғыз жолы - оны күнтізбелік ай бойынша жою, өйткені сегменттер ешқашан айдың шекарасын кесіп өтпейді. ClickHouse командасы бұл мүмкіндікті теңшеуге болатын ету үшін белсенді жұмыс істеуде. Екінші жағынан, ол жазу және біріктіру сегменттерін дау-дамайсыз етеді, сондықтан енгізу/шығару немесе негізгі қанықтыру орын алғанша, бір уақыттағы кірістірулер санымен сызықтық өткізу ауқымын алыңыз.
Дегенмен, бұл жүйенің шағын пакеттер үшін жарамсыз екенін де білдіреді, сондықтан буферлеу үшін Кафка қызметтері мен кірістіргіштер қолданылады. Әрі қарай, фондық режимдегі ClickHouse сегменттерді біріктіруді үздіксіз орындауды жалғастырады, осылайша көптеген шағын ақпарат бөліктері біріктіріліп, көп рет жазылады, осылайша жазу қарқындылығы артады. Дегенмен, тым көп қосылмаған бөліктер біріктіру жалғасып жатқанда, кірістірулердің агрессивті тежелуіне әкеледі. Нақты уақыттағы қабылдау мен қабылдау өнімділігі арасындағы ең жақсы ымыра кестеге секундына шектеулі кірістіру санын енгізу екенін анықтадық.

Кестені оқу өнімділігінің кілті индекстеу және дискідегі деректердің орналасуы болып табылады. Өңдеу қаншалықты жылдам болса да, қозғалтқыш дискіден терабайт деректерді сканерлеу және оның бір бөлігін ғана пайдалану қажет болғанда, уақыт қажет болады. ClickHouse - бұл бағаналы дүкен, сондықтан әрбір сегмент әрбір жол үшін сұрыпталған мәндері бар әрбір баған (баған) үшін файлды қамтиды. Осылайша, сұрауда жоқ барлық бағандарды алдымен өткізіп жіберуге болады, содан кейін бірнеше ұяшықтарды векторланған орындаумен қатар өңдеуге болады. Толық сканерлеуді болдырмау үшін әрбір сегментте шағын индекс файлы болады.

Барлық бағандар «бастапқы кілт» бойынша сұрыпталғанын ескере отырып, индекс файлы тіпті өте үлкен кестелер үшін де жадта сақтау үшін әрбір N-ші жолдың белгілерін (түсірілетін жолдарды) қамтиды. Мысалы, әдепкі параметрлерді «әрбір 8192-ші жолды белгілеу», содан кейін 1 триллионмен кестені «аз» индекстеу үшін орнатуға болады. жадқа оңай сыйатын жолдар тек 122 070 таңбаны алады.

Жүйені дамыту

Clickhouse-дың дамуы мен жетілдірілуін мына жерден көруге болады Github репо және «өсу» процесі әсерлі қарқынмен жүретініне көз жеткізіңіз.

Clickhouse қолданбасын ELK, Big Query және TimescaleDB үшін ауыстыру ретінде пайдалану

Әйгілі

Clickhouse-дың танымалдылығы, әсіресе орыстілді қауымдастық арасында экспоненциалды түрде өсіп келе жатқан сияқты. Өткен жылғы High load 2018 конференциясы (Мәскеу, 8 жылғы 9-2018 қараша) vk.com және Badoo сияқты құбыжықтар Clickhouse қолданбасын пайдаланатынын, оның көмегімен олар бір уақытта ондаған мың серверлерден деректерді (мысалы, журналдар) енгізетінін көрсетті. 40 минуттық бейнеде ВКонтакте тобындағы Юрий Насретдинов мұның қалай жасалатынын айтады. Жақында біз материалмен жұмыс істеуге ыңғайлы болу үшін транскриптті Habr сайтында орналастырамыз.

Өтініштер

Зерттеуге біраз уақыт жұмсағаннан кейін, ClickHouse пайдалы болуы мүмкін немесе MySQL, PostgreSQL, ELK, Google Big Query, Amazon RedShift, TimescaleDB, Hadoop, MapReduce, Pinot және сияқты басқа дәстүрлі және танымал шешімдерді толығымен алмастыра алатын аймақтар бар деп ойлаймын. Друид. Төменде жоғарыдағы ДҚБЖ жаңарту немесе толығымен ауыстыру үшін ClickHouse пайдалану мәліметтері сипатталған.

MySQL және PostgreSQL мүмкіндіктерін кеңейту

Жақында біз ақпараттық бюллетень платформасы үшін MySQL-ді ClickHouse-пен жартылай ауыстырдық Mautic ақпараттық бюллетень. Мәселе MySQL нашар дизайнға байланысты жіберілген әрбір электрондық поштаны және сол электрондық поштадағы әрбір сілтемені base64 хэшімен тіркеп, үлкен MySQL кестесін (email_stats) жасауында болды. Қызмет жазылушыларына тек 10 миллион электрондық поштаны жібергеннен кейін, бұл кесте 150 ГБ файл кеңістігін иеленді және MySQL қарапайым сұрауларда «ақымақ» бола бастады. Файл кеңістігі мәселесін шешу үшін біз InnoDB кестесін сығуды сәтті қолдандық, ол оны 4 есе азайтты. Дегенмен, тарихты оқу үшін ғана MySQL-де 20-30 миллионнан астам электрондық поштаны сақтау әлі де мағынасы жоқ, өйткені қандай да бір себептермен толық сканерлеуді қажет ететін кез келген қарапайым сұрау свопта нәтиже береді және мен көп. /O жүктеме, оған сәйкес біз Zabbix-тен үнемі ескертулер алып тұрдық.

Clickhouse қолданбасын ELK, Big Query және TimescaleDB үшін ауыстыру ретінде пайдалану

Clickhouse деректер көлемін шамамен азайтатын екі қысу алгоритмін пайдаланады 3-4 рет, бірақ бұл нақты жағдайда деректер әсіресе «қысылатын» болды.

Clickhouse қолданбасын ELK, Big Query және TimescaleDB үшін ауыстыру ретінде пайдалану

ELK ауыстыру

Менің жеке тәжірибеме сүйене отырып, ELK стек (ElasticSearch, Logstash және Kibana, осы нақты жағдайда ElasticSearch) журналдарды сақтауға қажеттіден гөрі, іске қосу үшін әлдеқайда көп ресурстарды қажет етеді. ElasticSearch - егер сізге толық мәтінді журналды жақсы іздеу керек болса (бұл сізге шынымен қажет емес деп ойлаймын) тамаша қозғалтқыш, бірақ мен оның неліктен іс жүзінде стандартты тіркеу механизміне айналғанына таңғаламын. Оның Logstash-пен біріктірілген қабылдау өнімділігі бізге өте жеңіл жүктемелерде де қиындықтар туғызды және бізден көбірек жедел жады мен дискілік кеңістікті қосуды талап етті. Деректер базасы ретінде Clickhouse келесі себептерге байланысты ElasticSearch-тен жақсырақ:

  • SQL диалектіні қолдауы;
  • Сақталған деректерді қысудың ең жақсы дәрежесі;
  • Толық мәтінді іздеудің орнына Regex тұрақты өрнек іздеулеріне қолдау көрсету;
  • Жақсартылған сұрауларды жоспарлау және жоғары жалпы өнімділік.

Қазіргі уақытта ClickHouse-ті ELK-мен салыстыру кезінде туындайтын ең үлкен мәселе - журналдарды жүктеп салу шешімдерінің жоқтығы, сондай-ақ тақырып бойынша құжаттама мен оқу құралдарының болмауы. Сонымен қатар, әрбір пайдаланушы ELK-ті Digital Ocean нұсқаулығын пайдаланып конфигурациялай алады, бұл мұндай технологияларды жылдам енгізу үшін өте маңызды. Дерекқор механизмі бар, бірақ ClickHouse үшін Filebeat әлі жоқ. Иә, бар еркін және журналдармен жұмыс істеу жүйесі ағаш үй, құралы бар клик журнал файлының деректерін ClickHouse ішіне енгізу үшін, бірақ мұның барлығы көбірек уақытты алады. Дегенмен, ClickHouse өзінің қарапайымдылығына байланысты әлі де көшбасшы болып табылады, сондықтан тіпті жаңадан бастағандар оны оңай орнатып, оны небәрі 10 минут ішінде толық функционалды пайдалана бастайды.

Минималистік шешімдерді таңдап, мен Кафканы пайдаланбауға тырысып, ClickHouse-пен бірге жады өте аз журналдарды тасымалдауға арналған FluentBit құралын қолдануға тырыстым. Дегенмен, кішігірім үйлесімсіздіктерді шешу қажет, мысалы күн пішімі мәселелерібұрын мұны FluentBit-тен ClickHouse-қа деректерді түрлендіретін прокси қабатсыз жасауға болады.

Балама ретінде, Kibana ClickHouse сервері ретінде пайдаланылуы мүмкін Графана. Менің түсінуімше, бұл деректер нүктелерінің үлкен санын көрсету кезінде өнімділік мәселелерін тудыруы мүмкін, әсіресе Grafana ескі нұсқаларында. Біз мұны Qwintry-де әлі қолданып көрмедік, бірақ бұл туралы шағымдар Telegram-дағы ClickHouse қолдау арнасында мезгіл-мезгіл пайда болады.

Google Big Query және Amazon RedShift ауыстыру (ірі компанияларға арналған шешім)

BigQuery үшін ең қолайлы жағдай - 1 ТБ JSON деректерін жүктеп, оған аналитикалық сұрауларды орындау. Big Query - ауқымдылығын асыра бағалауға болмайтын тамаша өнім. Бұл ішкі кластерде жұмыс істейтін ClickHouse бағдарламасына қарағанда әлдеқайда күрделі бағдарламалық жасақтама, бірақ клиенттің көзқарасы бойынша оның ClickHouse-пен көп ұқсастығы бар. SELECT үшін төлей бастағаннан кейін BigQuery тез қымбаттауы мүмкін, сондықтан бұл барлық артықшылықтары мен кемшіліктері бар шынайы SaaS шешімі.

ClickHouse - көптеген есептеулер үшін қымбат сұрауларды орындаған кезде ең жақсы таңдау. Күн сайын іске қосылған ТАҢДАУ сұраулары неғұрлым көп болса, Big Query-ді ClickHouse-мен ауыстыру соғұрлым орынды болады, өйткені мұндай ауыстыру өңделетін көптеген терабайт деректерге келгенде мыңдаған доллар үнемдеуі мүмкін. Бұл Big Query жүйесінде өңдеу өте арзан сақталған деректерге қолданылмайды.

Altinity негізін қалаушы Александр Зайцевтің мақаласында «ClickHouse-қа ауысу» осындай ДҚБЖ көшіруінің артықшылықтары туралы айтады.

TimescaleDB ауыстыру

TimescaleDB – тұрақты дерекқордағы уақыт қатарларымен жұмысты оңтайландыратын PostgreSQL кеңейтімі (https://docs.timescale.com/v1.0/introduction, https://habr.com/ru/company/zabbix/blog/458530/).

ClickHouse уақыт қатарларының тауашасында маңызды бәсекелес емес, бірақ бағаналық құрылым және векторлық сұрауларды орындау болса да, ол аналитикалық сұрауларды өңдеудің көптеген жағдайларында TimescaleDB қарағанда әлдеқайда жылдам. Бұл ретте ClickHouse-дан пакеттік деректерді алу өнімділігі шамамен 3 есе жоғары, сонымен қатар ол дискілік кеңістікті 20 есе аз пайдаланады, бұл тарихи деректердің үлкен көлемін өңдеу үшін өте маңызды: 
https://www.altinity.com/blog/ClickHouse-for-time-series.

ClickHouse-дан айырмашылығы, TimescaleDB жүйесінде дискілік кеңістікті үнемдеудің жалғыз жолы ZFS немесе ұқсас файлдық жүйелерді пайдалану болып табылады.

ClickHouse бағдарламасының алдағы жаңартулары дельта қысуды енгізуі мүмкін, бұл оны уақыт серияларының деректерін өңдеу және сақтау үшін одан да қолайлы етеді. TimescaleDB келесі жағдайларда бос ClickHouse қарағанда жақсы таңдау болуы мүмкін:

  • өте аз жедел жады бар шағын қондырғылар (<3 ГБ);
  • үлкен фрагменттерге буферлеуді қаламайтын шағын INSERT-тердің үлкен саны;
  • жақсырақ консистенциясы, біркелкілігі және ACID талаптары;
  • PostGIS қолдауы;
  • бар PostgreSQL кестелерімен қосылу, өйткені Timescale DB негізінен PostgreSQL болып табылады.

Hadoop және MapReduce жүйелерімен бәсекелестік

Hadoop және басқа MapReduce өнімдері көптеген күрделі есептеулерді орындай алады, бірақ олар үлкен кідірістермен жұмыс істейді. ClickHouse бұл мәселені терабайт деректерді өңдеу және нәтижелерді дерлік лезде шығару арқылы түзетеді. Осылайша, ClickHouse жылдам, интерактивті аналитикалық зерттеулерді орындауда әлдеқайда тиімді, бұл деректер ғалымдарын қызықтырады.

Пино және Друидпен бәсеке

ClickHouse-тың ең жақын бәсекелестері - бағаналы, сызықты түрде масштабталатын ашық бастапқы өнімдер Pinot және Druid. Бұл жүйелерді салыстыратын тамаша жұмыс мақалада жарияланған Романа Левентова 1 жылғы 2018 ақпандағы

Clickhouse қолданбасын ELK, Big Query және TimescaleDB үшін ауыстыру ретінде пайдалану

Бұл мақала жаңартуды қажет етеді - онда ClickHouse ЖАҢАЛЫҚТАУ және ЖОЮ операцияларын қолдамайтыны айтылған, бұл соңғы нұсқалар үшін мүлдем дұрыс емес.

Бұл дерекқорлармен тәжірибеміз көп емес, бірақ маған Druid және Pinot бағдарламаларын іске қосу үшін қажетті инфрақұрылымның күрделілігі ұнамайды - бұл барлық жағынан Java-мен қоршалған қозғалатын бөліктердің тұтас тобы.

Druid және Pinot - бұл Apache инкубаторлық жобалары, олардың барысы туралы Apache GitHub жобасының беттерінде егжей-тегжейлі қарастырады. Пино инкубаторда 2018 жылдың қазан айында пайда болды, ал Друид 8 ай бұрын - ақпанда дүниеге келді.

AFS қалай жұмыс істейтіні туралы ақпараттың болмауы мен үшін кейбір және мүмкін ақымақ сұрақтар тудырады. Қызық, Пино авторлары Апачи қорының друидке қолайлы екенін байқады ма және бәсекелеске деген бұл көзқарас қызғаныш сезімін тудырды ма? Егер біріншісінің қолдаушылары кенеттен екіншісіне қызығушылық танытса, Друидтің дамуы бәсеңдеп, Пиноның дамуы тездей ме?

ClickHouse кемшіліктері

Жетілмегендік: Әлбетте, бұл әлі де жалықтыратын технология емес, бірақ кез келген жағдайда басқа бағаналық ДҚБЖ-да мұндай ештеңе байқалмайды.

Кішкентай кірістірулер жоғары жылдамдықта жақсы жұмыс істемейді: кірістірулерді үлкенірек бөліктерге бөлу керек, себебі шағын кірістірулердің өнімділігі әр жолдағы бағандар санына пропорционалды түрде төмендейді. ClickHouse дискідегі деректерді осылай сақтайды - әрбір баған 1 немесе одан да көп файлды білдіреді, сондықтан 1 бағаннан тұратын 100 жолды енгізу үшін кемінде 100 файлды ашып жазу керек. Сондықтан кірістірулерді буферлеу делдалды қажет етеді (егер клиенттің өзі буферлеуді қамтамасыз етпесе) - әдетте Кафка немесе кезекті басқару жүйесінің қандай да бір түрі. Сондай-ақ, деректердің үлкен бөліктерін кейінірек MergeTree кестелеріне көшіру үшін Буфер кестесі механизмін пайдалануға болады.

Кестелерді біріктіру сервердің жедел жадымен шектелген, бірақ кем дегенде олар сонда! Мысалы, Druid және Pinot-та мұндай қосылымдар мүлдем жоқ, өйткені оларды түйіндер арасында деректердің үлкен бөліктерін жылжытуды қолдамайтын таратылған жүйелерде тікелей жүзеге асыру қиын.

қорытындылар

Біз алдағы жылдарда Qwintry жүйесінде ClickHouse-ты кеңінен қолдануды жоспарлап отырмыз, өйткені бұл ДҚБЖ өнімділіктің тамаша теңгерімін, төмен шығындарды, ауқымдылықты және қарапайымдылықты қамтамасыз етеді. ClickHouse қауымдастығы оны шағын және орта өлшемді қондырғыларда пайдаланудың көбірек тәсілдерін ұсынғаннан кейін ол тез тарала бастайтынына сенімдімін.

Кейбір жарнамалар 🙂

Бізбен бірге болғандарыңызға рахмет. Сізге біздің мақалалар ұнайды ма? Қызықты мазмұнды көргіңіз келе ме? Тапсырыс беру немесе достарыңызға ұсыну арқылы бізге қолдау көрсетіңіз, әзірлеушілерге арналған бұлтты VPS $4.99, Сіз үшін біз ойлап тапқан бастапқы деңгейдегі серверлердің бірегей аналогы: VPS (KVM) E5-2697 v3 (6 ядросы) 10 ГБ DDR4 480 ГБ SSD 1 Гбит/с 19 доллардан немесе серверді қалай бөлісуге болатыны туралы барлық шындық? (RAID1 және RAID10, 24 ядроға дейін және 40 ГБ DDR4 дейін қол жетімді).

Dell R730xd Амстердамдағы Equinix Tier IV деректер орталығында 2 есе арзан ба? Тек осында 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6 ГГц 14C 64 ГБ DDR4 4x960 ГБ SSD 1 Гбит/с 100 теледидар 199 доллардан бастап Нидерландыда! Dell R420 - 2x E5-2430 2.2 ГГц 6C 128 ГБ DDR3 2x960 ГБ SSD 1 Гбит/с 100 ТБ - 99 доллардан бастап! туралы оқыңыз Инфрақұрылымдық корпорацияны қалай құруға болады. бір тиынға 730 еуро тұратын Dell R5xd E2650-4 v9000 серверлерін қолданатын класс?

Ақпарат көзі: www.habr.com

пікір қалдыру