так ну давайте начнем так среднего говорим про кафку базовые механизмы принципы кафки да все с нуля никакого там к утра хардкора не будет ну что мне сказали что уровне слушайте будет разный поэтому я объясню все самого начала и все самое основное конце еще будут бонусом возможно другой доклад не короткие по security кафки давайте начнем так до себе я работаю с марта те архитектором вот мостам кафка активно используется бегать и поэтому об опыт есть и сколько в этом проекте на других так давайте начнем самого начала до шацкого кафка как ее определение делает это обычно распределенный брокер сообщениями до каких-то событий стримингом режиме то есть нам прилетает на много-много сообщениям нужно их обработать и кому-то передать вот кафка это open source решения с и разрешительной лицензией вот можно использовать эти проблем нету используется для платформах с высокой с требованием высокой производительности стриминговый аналитики где требуется интеграция с различными данными из разных источников также используется смешен претерпевать так а может он бьет поставить все слышу там кого-то еще и мешков дмитрий а так все отлично пасибо так какие основные свойства кафки да когда про него говорят но 1 то распределенность это распределенная система это не один какой-то сервер да это множество серверов объединенных работающих слаженно вот это отказоустойчивая система собственно поэтому может использоваться мишин кредитов всяких системах высокая доступность данных да то есть вы хоть какого-то узла не нарушает доступа к данным данный у нас есть они доступны в любом случае вот данные согласованы это очень важно да то есть если как об теорема вот из этой cup теоремы и кафка подержит первые две серии да все это согласованность вот и все все данные если мы положение недавно есть и нам доступны вот а также кафка обеспечу сока притягательность да там есть много-много всяких уже эксплуатации где миллионы сообщений в секунду обрабатываются решили мастера горизонтальное масштабирование не вертикальная дацане огромный какой-то супер сервис таится ставится простые машины их очень много их можно легко добавлять вынимать вот все перри балансируется автоматически вот и кафка очень интегрирована с различными системами очень-очень много всяких баз данных других всяких платформы систем которые уже интегрирован с кафкой могут использовать очень популярное решение вот немного истории до разработана была в linked in компании еще программный код впервые был опубликован 2011 году а с конца 2012 года уже попала по починку батареи с тех пор кавказ подо патчем реализованы кафка на скале джаве по поводу названия его придумывал создатель джей кребса в чине франц кафка франц кафка это немецкий писатель такую известная личность 20 веке собственных jacobs увлекался его трудами и из того что он писатель и.а. изначально как у создавали как систему оптимизированы под запись он решил таким образом увековечить имена своим инструменте этом так а теперь о том какой вообщем задача решается с помощью кафки что что мыши что мы хотим вот у нас есть набор событий разнородных могут быть однотипные события могут разнородные мы хотим куда-то отправить на для этого у нас есть поставщики данных продюсера вот так же у нас есть потребители данным деком как к которым нужны эти данные при этом может казаться так что разным разным потребителям нужны одни и те же самые данные могут быть это не пересекающей да то есть тут не ограничен то есть нужно ли давать некоторые такой широко тщательный режим вот на примере да там первый тип сообщений требуется двум потребителем второй тип сообщения только там одному потребителю второму а третий тип сообщение требуются обще всем потребителям да вот такой режим нужно обеспечить если рассматривать вот эту схему как для реализации целиком да она довольно трудоемко на какие здесь сложности есть это надежность и гарантия доставки данных то есть продюсеры должны знать все консьюмер ах а потребитель не так кому куда отправить при этом если консьюмер там вдруг недоступен что с этим сообщением делать да вот когда появляется новый консьюмер и получать продюсеры должны о них знать и нужно как-то каким-то образом чтобы каждый продюсер регистрировал вот есть проблема интеграции да то есть в идеальном мире что все продюсер отправителей князь умер работает и на психическом стойки до с одними кинг протоколами просим на самом деле по факту оказывается не так сообщение отправляется с одного техничка стояка потребляется могут быть совсем с другого вот и вот как это все интегрировать тоже сложно но и тут техническая поддержка если где-то что-то ломается получается очень сложно отследить и кому-то и решить проблему вот какие решения есть данное решение стандартная можно взять посредника брокера брокер при примете на себя функцию получения данных от продюсеров и собственно предоставление данных костюмеров этом брокере есть набор ящиков да и под каждый тип событий вот продюсер и складываются эти ящики брокере сообщение вот а консьюмер и потом приходит из этих ящиков забирает нужно им из разных ящиков нужно им события вот собственно схема получается довольно простая надежная гарантия гарантия надежного единый узел брокер продюсером ничего не надо знать консьюмер ах то есть они просто отправляет един в единый узел брокер и все также интеграция разных стыков здесь происходит тоже довольно просто продюсером нужно знать только и 5 брокера им отправить к северу тоже узнать такой 5 брокера и все между собой продюсере консилер и не никак не контактирует вот но и понятно такое общеизвестное решение да и данном случае мы рассмотрим кафку качестве брокера ну и дальше пойдет мой доклад о кафке вот сейчас стоит кафка вот здесь перечислены основные ее сущности объект или термина до брокеры сути per the same сообщения топик наши ящики вас складывается данный газ разделением на партиции и пройтись и консилер это отправитель и получатель сейчас пройдем по ним да и более подробно рассмотрим что это такое начнет брокеры звуки про вот брокер какие функции он выполняет брокер еще называется тыковка сервер кафка not кафка брокер это все синонимы да если вы будете слушать слышать это разные названия это все кафка брокер начните функцию выполняет он отвечает за прием сообщений от продюсеров он хранит сообщение чтобы потом предоставлять консилиум эти сообщения от властные функции вот и если бы он был один то была бы проблема собственно надежности данных и производительности данных грамм по этому добавляются новые брокера чтобы данные не терялись можно было передавать они между собой общаются создавая кафка кластер таким образом мы можем производить может а верования нашего кластер а и репликацию данных для надежности не потери данных вот но это не все требуется еще один инструмент координатор до что в котором мы будем хранить конфигурацию состоянии кластер а вот качестве инструмента выбран за кипер таки пират вообще если известны такое хранилище базы данных небольшая да она очень быстро быстро работает на операции чтения не очень быстро работы на операции записи и и для хранения всяких метаданных кластера или состоянии если но не очень прям активно сильно меняется и теперь тут самая to eat кафка его задействуется вот что зуб теперь хранится состояния кластера да какие из брокеры где они проще собственно к эта конфигурация кластер а и дальше сами данных где расположены это вот наши ящики топике да и партиции по парте цен там тоже есть особенные партиции лидер против a lawyer и вот эта вся информация хранится зуб теперь а также среди брокки выделяется один такой специальный брокер он называется кафка контроллером вот он обеспечивает собственном консистентных данных вот кафка это мастер своих система вот это не мастер леса мастер слейда и контроллер тут должен и закипит и растут тоже используется для того чтобы выбрать контроллер про брокер суперсет теперь сорт вопросами сообщи некоторым отправляем до в основном они представляют из себя киева или у пары вот ключ на самом деле не необязательно он используется для прядения сообщений по кластеру вот собственно или это сами нашей бизнес данные для себя это просто как сказать массив байт вот так же в сообщении можно указать таймс темп этого сообщения если мы не указываем он будет автоматически указан в самом брокере текущее системное время вот и также начиная с версии по моему 2 появились кадры это некоторые атрибуты кивы люда которые можно прикреплять к сообщению вот такая есть проблема нас тоже была реальность банки проблема когда продюсер отправляли более свежей версии с лидерами до при этом сами они хедер не указывали использовали java и кейн и спрингер с принтом поставлял свой атрибуты какие-то системы для своих нужд консилер использовались там были гости системе даст старые были 08 версия не понимали fedora не могли прочитать поэтому очень важно чтобы все компоненты продюсере консилер работали на одной версии да так собственно той версии на которой установлен сама кафка так собственно про сообщение все теперь пойдем протопите партиции топиков до такой она сама база основная сущность кафки из себя писать просто стрим данных не знаю можно как-то аналог таблицы плясать да и по сути это получения каких-то однотипных событий да все что мы логически объединению как какой-то единый события причем они могли получаться из разных источников не обязательно из одного до ночи можно складывать в эту трубу в топик вот в топике у нас выстраивается некоторая очередь до в которую складываются все наши входящие сообщения вот и из этой дочери потому сообщение извлекаются вот здесь пример да есть некоторый набор событий каких-то разных да они у нас складываются вот при этом они получили кладутся в том порядке в котором собственно наш продюсер отправляюсь в топик сообщения вот и дальше мы эти данные можем считывать до получателем вот при этом мы заметим что мы считаем в том же порядке в котором продюсер отправлял данные в топик это как раз свеча кафки он обеспечит фифа first in first а вот сейчас упорядоченную при этом к рыбе там курица тоже очереди там порядок не поддерживается приоритетное то другое вот и не тут еще важно что сообщение при чтении до конца миром сами сабли сами события они из топика не пропадают данные не удаляется итак 1 обеспечивает наш окончательный широковещательный режим когда он из могут быть несколько разных костюмеров они могут потреблять одни и те же данные вот данный не удаляется новый красивый пришел и снова с нуля там все прочитал но здесь показано как бы линейна в один поток до при больших нагрузках на самом деле не очень работает хочется как-то раз проверить нагрузку вот беда-то highload и прочее вот поэтому было предложено решение суда разделить эту и ну очередь на партиции внутри да и у нас появляется в топике несколько партиций вот это конфигурировал параметр мы воздаем ну и как дальше работать мы также проблемам причем можно принять ни одним продюсера мы можем срок низким продюсерами да и также получать получается можем ни одним последовать на консилиум а сразу в параллели из разных партиций до 1 тим все событи получать несколько потоков вот но дальше примеру опять мы отправляем какие то сообщения на штапик видим что они каким-то образом распределяется по братец и вот и консью начинает их потреблять потребляется он получается не в том порядке в котором изначально были заложены и события у продюсера но можно заметить что они в том порядке в котором увязают в партийцы данном случае упорядочение она на уровне партийцы да то есть мы все считываем нас неупорядоченно если мы считаем подъемную партицию там у порядочность она гарантируется и это на самом деле очень важная фича и часто используется когда нам допустим необходимо все события как от одного объекта пусть ему одного пользователя до обрабатывать упорядоченную то есть в каком порядке они происходили использовать или мы пустим таком порядке мы хотим их обрабатывать для этого можно просто событий одного пользователя все отправлять в одну партицию и одном гарантирует что вот в каком порядке мы отправили в таком порядке мы будем их обрабатывать вот дальше собственно размещение to pick up a кластер да у нас брокер не один вас несколько и все портится они раз принять каким-то образом по нашим брокерам вот здесь партиции нумеруются с нуля nuc и целым числом начиная с 0 до 0 12 и так далее вот здесь показана что у нас допустим дис . он состоит из трех партиций 012 и у parties и студентам по трем брокером но так такое распыление на не всегда происходит возможно не сбалансировать то есть может быть на третьем брокер вообще ничего не туда где против виджет на втором и может быть даже еще хуже когда у нас все parties вообще находится на одном брокере значит почему так происходит в общем кафка так как это не разумно поступает у нее просто заложены другой принцип сбалансированности она говорит о том что не важно чтобы на каждом уроке лежала одинаково количество партиций от любых топиков да то есть она берёт все топики которые есть все их партиции и вот допустим их там получилось 450 и вот надо по 150 партиций на каждой роте положить при этом неважно портится из какого-то пика находится тут на самом деле есть такой нюанс - да если мы вот такой полагаемся автоматически можем получить проблемы например если у нас один топик очень жирный а все остальные очень маленькие да у нас может получиться что партиции жирного топика все лежат на дом брокеры я то что у него будет высокая нагрузка то что там будет за руку на много выше а все маленькие допустим портит топики и партиции будут лежать на других громких они будут не так как не до загружены поэтому вот эту задачу балансировки иногда приходится решать в ручном режиме понимаешь что вот эта pink он толстый и надо его parties и развести это можно делать с помощью конфигурации настраивать да то есть мы можем говорить что такие партийцы должен везет на таких-то брокерах но нужно нужно понимать что если мы видим всякие перекосы что у нас какая-то но до 1 перегружена на другой они загружена это к 1 признак может быть того что партиции каких не жирно . полина 1 но да это это не только это вариант может быть разные но это один из таких дальше собственно хранятся данные в брокере давать ему дал в этот брокер в топе к провели данные где они хранятся к это баз данных еще что нет они хранятся просто в обычных лог-файлов вот это очень простая структура вот рассмотрим как это работает значит вот у нас есть у брокера файловая система не есть папка logs если мы за границу clogs мы увидим что в этой папке logs есть папки под каждую партицию до нашего топик вот на 170 пика унции вес 3 партиции 012 у нас создана и у нас в этой папке logs есть три папки и химия состоит из собственно звания топика ада дефис и номер самой партийцы или секатор и да ну собственно это просто порядковый номер а0 и а1 а2 вот давайте дальше заглянем внутрь какой-нибудь папки для партиции допустим а 0 да и что мы там увидим а мы там увидим три файла с расширением лог index индекс вот сейчас специально пройдемся по ним значит файл oxob содержит сами данные которые мы отправляем сами сообщения из некоторые дополнительные формации time stamp of set of set это собственно номер сообщения в партиции да они тоже там от нуля пронумерованы позиция это смещение в этом файле buy тогда три сообщения у нас полностью занимает допустим там 67 байт поэтому первое второе сообщение с этом один оно уже начинается 67 этого там флаг или вот второй файл это файл индекса это mapping офсета на позицию когда мы хотим прочитать какого-то все говорим вот мы хотим со с этой единицы до мы идем в этот файлик смотрим что во всю эту единицу находится позиции 67 поэтому после значит идем в лог-файл и чит делаем сик на 6 7 байт или начинаешься 7 байта у нас идет вот это сообщение с этом 1 и 3 файла time яндекс это mapping индекс time stamp on off set это бывает полезно когда мы хотим я хочу прочитать сообщение начиная со вторника да то есть это такая операция как временная мы не знаем об цвет который был во вторник но мы хотели бы со вторника примерно читать и мы можем карать к местам и собственно ближайший таймс темп который больше этого да нам будет выдан офсет мы можем когда вы там сами получим офсета один со столь во вторник было все-таки начинаем дальше читать тут понятно что если мы таем с тем как ты рандомно всегда выставляем на продюсере то там в одном в одном как бы файле до лог-файле могут быть различным сэмплы какие-то будущем и прошлом но если мы не пользуемся таймс темплтона старается системной системное время не тут более менее можно этому верить и понимать что если мы указали там вторник то дальше будем сушыть сообщение читать именно начиная со вторника ну бывает правдой что данные при приходят какие-то с запозданием ему им там будем устанавливать позднее но будем их перечитывать одну такая опция есть то есть мы пытаемся мы получаем офсет потом идем в яндекс файл по все это получаем позицию лог-файле идем в лог-файл этой позиции читаем что все нашего сообщения вот если наши на что пеппа работает чуть дольше да мы заметим что у нас появляются еще файлы в нашей директории вот и они столь же структуры то есть 53 файла появилась лака яндекс яндекс кто но имя файла изменилось значит счет такое вот этот файл он не единый бесконечный файл дано все данные этой партиции у него если нет а по умолчанию стоит 1 гигабайт то есть при превышении 1 гигабайта считается что вот этот файл закрывается создается новый да это называется в кафки сегментами создается новый сегмент старый сегмент он уже морозится он уже никак не меняется да он всегда активны только один сегментом с наибольшим вот этим вот именно имя вообще сегмента строится по первому все ту которую вовсе это первое сообщение которое находится вот в этой в этом буквально до 7 o'clock файл смотрим что там первое сообщение со все там два вот как бы имя файла он как раз тоже будет съезжать двойку так что еще с сегментом важно у сегмента есть таймс темп то же время сегмент timestream сегмента это максим максимов максимальное время события находящийся в этом сегменте до 1100 тысяч событий мы смотрим какого наибольший темп вот там мисс эмп является timestream вам сегмента этот этап будет использовать чуть больше об этом расскажу значит такая задача да как мог но если мы хотим удалить данные star peek а как мы это можем сделать а вообще никакой операции удаления из топиков карте нету да то есть можно только писать и читать то есть никак но на самом деле есть другое удаление автоматическая по истечении которого периода за вами the time to lift отель при превыше при достижении этого допустим у нас тоже данные да как когда время истекло мы эти данные можем удалить при этом как удаляется удаляется по сегментам да не удаляется отдельные события при повышении отеля а удаляется именно сегменту целиком вот я говорю что у сегмента есть время до это время максимальное время события в этом сегменте вот если вот вот это в timestream он стекает целиком сегмент удаляется начал выделять сегменты это легко вопросов олег ты удали да никаких сканов поисков ничего не надо операция такая удаление под теле очень быстро вот ну тут есть на самом деле подводный камень и которые тоже иногда натыкались может быть так что какие не допустим том знает это тестовые какие клиенты начинают управлять в наши топике какие то сообщения при этом они установили там какой-нибудь будущем для каких-то своих экспериментов и тогда получается муму в каждом сегменте будем иметь какое-то событие даже достаточно только одного иметь которые допустим из будущее если совсем будущее там через год например совсем плохо это значит что у нас у всех timestream сегмента в будущем да и on она истечет только через год там и допустим две недели вот поэтому и если мы вдруг 0 что у нас сегмент не удаляется накапливается значит у в них есть событие с каким-то большим таймс темпом из будущего вот нужно найти кто так делает и собственно каким-то образом устранить эту проблему дальше рассмотрим репликацию данных да собственно надежность и отказоустойчивость если у нас все партиции находились в одном экземпляре на то в случае падения какого-то с брокером мы начинаем терять данные данные для второй позиции на этом рисунке уже потеряно вот чтобы этого не было доведено репликация из такая настройка при создании топиков репетиция фактор данном случае на примере потешим фактор ан-2 то если каждый партиции у нас две реплики и что деле происходит если у нас выходит из строя одна из нот вот и да тут еще важно требований окрепли когда что реплики 1 партиции не мог находиться одном рокере но это понятно что если брокер минут они все умрут а не обязательно даже находиться на разных брокеров он данном случае если у нас выпадает один брокер ничего страшного нас данные все есть ему и в дополнение кафка еще автоматически добавит новые реплики до который у нас пропали таким образом нас опять для каждой партиции две реплики все окей доныне потеряны значит вроде выглядит все просто на самом деле есть тут нюансы вот нюансы закачать в том что данные могут отставать и еще есть такое понятие главной реплики сейчас мы это рассмотрим что это такое вот так обеспечивает нам согласованность данных да то есть мы записываем данные мы их читаем у нас не могут данные не потеряться не дам какой ничего не чем консистенции прочида у нас все все стринги должно быть вот для этого но понятно чтобы обеспечить согласованность у нас должна быть к это мастер своих система и в кафки это меня так и сделано одна из реплик назначается лидер реплика допустим у нас по двери под по две или три по три реплики да на каждую партицию одна из реплик становится лидером вот все остальные называются видом ведомыми дэн фолловерами вот так да кто назначает эти двери лидеры брикеты говорю что у нас один из братьев он особенный он называется кафка контроллером да он как раз отвечает назначь за назначение что вот эти реплики для этой партиции они являются reader репликами да вот и очень важное такое замечание которое не все на самом деле знают вот что леди реплики чтение и запись приводится только среди репликой нельзя писать фолловеры или читайте с холодрыга всегда пишем и читаем в лидер реплики и вот это на тут тут такой будет нюанс white cat разбалансировать может оказаться так что все леди реплики контрпик оказывается на одной ноги и то что значит из того что он вся работа с топиком производится только через лиги реплики у нас пойдет вся работу на чтение и запись только через но у брокера а все остальные они фолловеры и через них работа не идёт они отдыхают у часа у нас сильный перекос 1 надо сильно перегружена когда мы такое наблюдаемую тоже нужно посмотреть на балансировку наших реплик там понятно какая является лидером какая фоловерам можем посмотреть размещение то есть обычно это нужно смотреть каким-то живым топиком вот если такое наблюдается нужно перри балансировать такая операция предусмотрена в карте можно как бы указать в конфиге что вот это это реплика должна быть там это там их пири-пири разнести а вот так теперь рассмотрим по поводу отставания данных на то что я говорил есть нюанс вот у нас и следи реплика есть допустим 3 фолловеры то есть всего 4 реплики для партиции вот как в лиге реплику попали какие-то данные всегда пишет столько лиги орешника фолловеры не пишется дальше эти события должны каким-то образом попасть фолловеры каким образом происходит они происходят через пулен фолловеров к лидеру да то есть фолловеры опрашивают лера чуть это много есть дай дай нам да понятно что здесь из того что они делают и как периодически интервал хоть и маленький но это периодически у нас может быть отставание по событиям в разных фолловеров и что произойдет если вдруг у нас лидер выпал кто теперь должен стать лидером да и все ли даны у нее есть мы тут не знаем то есть это вообще не надежное решение если работать именно так то это не надежно мы можем потерять какие-то данные может вообще оказаться так что ни одна flower а не то всех данных вот и мы потеряли это событие чтобы это решить в кафки в виде надо понять как in seeing реплики брату а yasar если мы носим через консоль смотрим описание топика его партиции реплики прочие там некоторые парики будут красоты чины как sr реплики вот что это за реплики в чем их особенность их особенность том что когда мы пишем в лидер события мы сразу же синхронно пишем еще и после только записали лидер сразу же gear обращается к этим sr фоловерам для того чтобы записать и события то здесь получается синхронная запись при этом оставшиеся не а из флаера не работает при этом режиме не опрашиваете могут отставать вот но и other follower это надежная кандидаты для нового лидера если вдруг текущий лидер упадет вот тут еще есть такой параметр вот сколько у нас будет вот этих вот in sink реплик понятно что они на самом деле тормозят запись да ну что нам надо бежать не только в лидера но нужно синхронном режиме считать другие реплики вот есть настройка mine mine in sink replicas равно 3 до обычно параметрам почему он стоит не в 4 да у нас 4 5 почему поставить четыре оставили 4 не стоит обычно стоят хотя бы на единица меньше почему потому что если есть такое требование что если и в текущий момент in sink реплик недостаточно несоответствие конфигурации тогда записи валится то есть продюсер вообще ничем не может ничего отправить в нашем случае здесь показана примере что у нас всего и синклер брики 33 герда и собственного пола вера и если в данном случае у нас один брокер выходит из строя то ничего страшного у нас это требование mensen реплика 3 остается до пышного 3033 брокер еще живы вот если бы у нас было четыре тогда выход любого брокера это все значит наношу на что пик уже ничего не записать вот и проблем поэтому обычно есть репрессий факторы вот эти не сильных реплики стоят на единицу меньше особенность так ладно про топике против немножко поговорили теперь про собственно наших отправителей о том как отправить данные как сообщение в кафку отправить вот вот у нас есть кластер до из брокер нот в брокерах есть топе топик ход желтым он отмечен это топик единый до в топиках указанные leger партиции почему ли руку что продюсеры пишут только в лидеры а также к концу мира читает только из лидеров поэтому здесь фолловеров и не указывал вот видим что на разные против разных количество каких-то партиций вот и наша задача отправлять сообщения от продюсера у брокера для этого продюсер есть функция send эта функция send any есть такие два важных параметра по гарантии и семантики доставки вот давайте рассмотрим да да и давайте начнем с гарантией доставки вот есть такой параметр ax он ты не можешь принимать три значения 0 1 минус 1 плюс 1 еще он называется это тоже можно писать давайте их отдельно посмотрим если у нас продюсер отправляет сообщение с акс 0 это на что его не интересует вообще подтверждение по отправке сообщения да то есть он отправил брокера и все и дальше он ничего не ждет им подтверждение нужно понятно что это самый ненадежный режим сообщение могут теряться за если сообщением что-то не так или убрать и там эта проблема ничего не записал он тебе ничего не подтвердил поэтому сообщение твой может пропасть но какие-то любимого я кейсом связаны может быть телеметрия когда там огромный поток событий это мне важно чтобы пропадет какой-то допустим там даже большой процент вот важнее запись чем вот это вот проверка такой режим используется следующий режим такой более компромиссный вариант это когда оксана 1 значит что продюсер нужно подтверждение только от лидия реплики он пишет леди реплику лидер или говорит я записала все окей и после этого продюсера считаешь вам сообщение от правил данной ситуации тоже возможно на самом деле проблема если вдруг после того как лидер сказал что я получил сообщение дальше он начинает раскидывать данные фоловерам но вот момент брокер упал то есть он не успел скинуть синхронно фоловерам данные таким образом это в радиусе вроде считает что он от правилам получил окно лишь на самом деле брокер упала это сообщение потерялась вот но на самом деле это на самом деле очень надежная часто популярен сейчас часто использование вариант но если нам нужно вообще гарантировать надежность нам нужно использовать третий режим это all или -1 этого ринга и потому что продюсер ждет подтверждение отправки сообщения от всех энсин крепких да то есть мы пишет ждем не только от лидера но и когда лидеры передать сообщение во все и sing реплики они ему скажут что и мы записали после этого только мы получаем ответ что окей сообщение записано это самый надежный режим надеюсь сообщение теряем да потому что в низких репликах уже записано так теперь рассмотрим как бы более детально из чего внутри стоит это send функция да ну что это клиенты в банке вас много продюсеров и все-все пользу функции сэм на самом деле не все знают как пользоваться и есть некоторые нюансы вот первая операция которая делается операция send это печь метаданных то есть продюсер но знаю нужно знать из чего состоит кластер да дальше он управляет данных какой-то топик ему нужно знать какие реплики где они находятся являются лидерами дарта чему он же может править только в лидеры вот ему это вся информация нужна эта вся информация хранится в кипере и он первый первым действием в команде send идет теперь на самом деле в новых версиях кафки не совсем так он идет к брокеру а брокер идет зуб теперь то есть через посредника но по сути все равно все лежит закипели старых версиях а напрямую ходил за keeper вот и тут есть такой важный нюанс с этими метаданными с тем что это блокирующий операция то есть вообще команда сцен заявлено у продюсера как асинхронная то есть мы отправили и дальше по и пою асинхронно получим какой-то call back но фич метаданных он производится синхронно то есть мы вызвали стенд если вдруг что то зацепки первым так или еще что-то где-то до мы начинаем там мы там зависли и этот тайм аут может длится 60 секунд он настраиваем получаем 60 секунд то есть вроде мы ожидаем что у нас с интернет сразу управления но на самом деле может зависнуть 6 секунд вот и вообще принципе это команда книг внешнему нашему тулу где перу для получения информации это тяжело операции поэтому не нужно на каждой отправка сообщений создавать нового продюсера да ну что сдать 1 продюсера как бы загрузить метаданные и вы с ними работать он их пишет а потом обновляет да там периодически или по изменениям вот так я на самом деле перешел сатана но я еще не договорил провод тут семантика доставки до семантика доставки говорит о том что продюсер может гарантировать что сообщение можно как бы не более одного сообщения отправится да можно сказать хотя бы одно значит он может отправить каждым сообщением еще дубль на верном об этом я позже расскажу всем но такие семантики все три семантики поддерживать или как эванс то есть каждое сообщение может отправиться только один раз понятно что все чем слабее уровень дать им производитель не получается решение вот так ну я наверно щас пока никто не буду останавливаться лучше в конце с успеем вот давайте вернёмся к нашему нашему теперь в методе send мы загрузили метаданные вот дальше получено сообщение киба этом мысе реализуем в нужный формат да у продюсера мы указываем так называемый те сериала я вылью сериала или например сам простой этой сфинксе я лазером и просто дебате переводим строку вот но всегда бывает разная бы с ним хотим в формате хранить там у этого сериала идет дальше следующим действием мы выбираем партицию в которой пойдет сообщение вот какие варианты вообще есть можно вообще при отправке сообщений указать я хочу вот именно портится номер один да это это это допустимо дальше может быть вариант когда я вообще не знаю какой против я хочу типа разбери сам да там брокеры ликов к тонике сами для этого используется round robin да по умолчанию когда мы просто начала пишем 0 нулевую партицию там первую вторую третью и так по кругу это round robin и третий вариант очень часто используемый это как бы портится определяется по ключу мы когда отправляем сообщение можем сказать те и вылью водки он используется для распределения по кластеру гарантируется что если мы отправляем сообщения с одним и тем же ключом она всегда будет попадать в одно и то же партицию ну технически это результат так что мы берем отключаешь используется мур-мур 2 функция вот и собственно получаем кайтах из числа да и берем остаток отделение на количество нот от нас три брокера до партиции у нас 4 берем остаток отделение на 4 и получаем супса номер партиции и вот у против и идет понятно что если следующий раз плюс придет хэш-функция у нас консистенция тот же самый результат на этот ключ мы пойдем в ту же портится это на самом деле очень важная особенность который часто используется на приемном и привязаться новую операционного профиля тысячу задействуем когда мы хотим чтобы обеспечить строгую согласованность между операциями обновления записи и чтения до попользовать лен мы все события одного пользователя все команды которые к нему приходят apt-get да мы кладем в одну партицию тем что мы в качестве уча передаем идентификатор пользователя и все и все все команды на поле попадают в одну партицию а в partition помню чтоб до кафка гарантирует у порядочность в каком порядке вы положили в таком же мы прочитали обработали и мы потом от против просто последовательно обрабатываем получаем команду апдейт при этом мой ответ сразу водоем поставляется сложная синхронная операция но дед следующий до восьми клиент получила ответ окей из раздела i get naked у не получит сразу ответ пока не обработается а потому что они находятся в одной партиции последовать на ворваться к апдейт не завершится где-то не будет выполняться таким образом обеспечен строгой согласованность вот дальше дальше сообщение у нас компрессируются но сжимается до используются разные коды керосин визитом с напитком или можно вообще не компрессе вот для этого использовалась только compression кодек вот дальше сообщение оно не отправляется сразу в каком нужном уроки рода мужчинам какой брокер какая птица у него а мой calling аккумулируем батч для повышения производительности да вот для этого есть две настройки большая хеллингер м с а большая говорит о том что мы начинаем копить батч до превышению размеры большая задача состоит в помощи не помощи нас килобайт мы накопили там 10 сообщений если они превысили 16 килобайт в этот момент батчата и совершенным может быть отправлен в брокер а есть другой параметр linger mazda допустим если мы долго не можем превысить большая и мы хотим сообщение должно быть все таки отправляться есть другой параметр по истечении тайм-аута никто то есть если мы batch копим уже какое-то время который превышает ливером с мы тоже считаем что базе завершён им его отправляем есть еще один нюанс когда у нас может небольшая с непривычной не ледяная местному и в то же время матча отправляем брокер когда такое происходит если вдруг мы видим что на одного брокера мы создаем два бача вот допустим видим что у брокера 2 у него две партиции 12 и мы создаем плащ для для первой партиции болезни 2 и если их суммарный объем эти глубокие превышает batch says the они тоже отправляются брокер они не завершены но из того что они идут на один брокер то есть по сути физически то же самое получается гаммы на одном брокер отправляем какой-то объем данных который превышает боишься из ну вот поэтому если вдруг такое происходит пугаться не нужно так ну и все мы почти накопили и начинаем отправлять в нужной брокеры до в нужны партийцы так продюсером пока все и теперь про консилера до потребителя данных о том как получать наши данные из кафки но записи есть три брокера в нём есть какие то ли лидер партиции колесе мир тоже читает только здесь я партиции фолловеры не читаются в конце мире есть команда пол вот мы можем при этом мы полем не по одному сообщение сразу патчами то есть нам мы получаем испортится сразу пачку сообщений вот если рассмотреть эту функцию внутри опять то же самое происходит как продюсером и фичи метаданные ну тоже самое где находится топики какие реплики являются лидерами таких брокеров они лежат состоянии классе райские брокеров след и прочее аналогично и дальше мы начинаем потреблять данные и сборки стоит мы знаем где находится в партиции и устанавливаем коннектор брокером до для получения эти птицы данных вот если у нас вдруг только просто один консилер и мы хотим читать весь топик он он один подключается сразу ко всем лидер partition но это не всегда может быть производителя потому что мы начинаем в один поток седана обрабатывать мы хотели бы попробовать распараллелить и такая возможность кафки есть это называется эта фича называется кричу мир группы мы можем запустить несколько напримеров качеству они относятся к одной группе для этого есть параметры группой где мы указывали каждого начнем r1 та же группа gi и они обвиняются в группу и теперь каждый консьюмер читает какие-то определенные партиции то есть когда у нас был один консьюмер да то есть группа стоит из на вакансию мира он считает все партиции час на рисунке представлен на схеме 4 консьюмер ада и у нас тут сочи 3 партиции к и каждый костюме уже забрал себе по одной партиций вот мы в параллель читаем как бы самый оптимальный вариант до больше контейнеров в данном примере делать нет нецелесообразно что если мы создадим еще одно консьюмер а для него партиции нет и он будет просто простаивать если же мы сделаем меньше к все мира до 83 да то значит на 1 консилера придется каких-то 2 партиции он был и сбалансировать нам нужно всегда стараться в распределенных системах и и там где у нас большая производительность и большие данные нам нужно всегда обеспечивается сбалансированности самого один из самых важных критериев для которые должны до должны учитываться таких системах дальше про посмотрим что такое офсет доу консьюмер а какая проблем вот мы вычитаем из брокера из партиции сообщения пулим да вот допустим нас вот первый консьюмер кашемир группе он палец сообщение из 0 партиции вот допустим к продюсер накидал эту партицию сообщение там ноль один два три четыре вот брокер брокер нам пачка предоставилась до партиции сразу допустим 3 сообщения вот эти три сообщения получили и обработали и после этого консьюмер ну или брокер упал до не против dance we can sing да это не имеет никого отношения хочу мир упал что происходит у нас есть группы другой консьюмер и он на себя берет обработку этой партиции да и что происходит он он зачитывая те же самые три сообщения которые можно обработать мы зачем нам это нужно уже обработали эти сообщения уже там что-то сделали и опять получать непонятно зачем вот мы бы этого не хотели как как как бы как это решить для этого в кафки есть такая фича как ранения все тов и коммиты что такое в кафки есть отдельный топик называется вот два подчеркиваний консьюмер подчёркивания в сердце в нем хранятся а все ты для каждой для каждой группы для каждой партиции вот сейчас мы увидим информация хранится вот справа появилась табличка да вот это в этом топике сообщения она содержит следующие поля собственно partition до портится именуются номер на название топика и собственный своим номером и что ли нулевую паркету из тупика а вот есть информация партиции дальше есть группа days который мы читали этот наших группа называется x вот и ответ который мы уже прочитали 1 консьюмер прочитал три сообщения 012 до языками тем что а все 2 он уже прочитал все больше обрабатывать не надо вот в этом сообщении у нас есть эта информация и как мы с этой информации дальше работаем если вдруг у нас пустой как мы работали три сообщения 1 к 7 и упал там и то у нас переключение идет обработки 0 парте цена 2 консьюмер а и что он делает он начинает из этого овце топика зачитывать информацию фонда в которой он видит что портится 0 обрабатывалась последний последний коммент был на все 2 поэтому мне нужно начинать это 3 и он запрашивает у 0 партиции да сразу со все три и получает уже новые сообщения таким образом обработка сообщений не дублировали сюда мы офсайд и храним в системном топике в кафки это то что нам надо значит какие бывают типа комментов вот здесь вот на картинке был commit показан да вот у нас первый консьюмер комитет вот а все топик но какие варианты возможно вообще есть off to commit off to commit а мне всегда хорош почему потому что когда мы получаем базе данных от брокера когда консилер только их получил вас он говорит про из происходит авто commit и брокер кафка считает что все для этого для этой для этой группы консьюмер of эти сообщения уже обработаны хотя кольцу мир их только получил к себе в руки до ему надо их обработать что-то с ними сделать если вдруг он в этот момент упал по сути он получил ставки на ничего не с ними не сделал до получается он потеряет сообщение по что при следующем подключении он же пойдет со следующего все тогда из того что commit последнего сообщение котором получил он уже закончился это вот это вот семантика доставки называется это мост wynn's значит хотя бы один раз мы обработаем мы можем не обработать потеряли сообщение off to commit если мы допускаем что можем потерять сообщает можно испортить of the comets а другой вариант это использовать ручную commit когда мы нам как у представлять данные сразу автомиг не происходит мы обрабатываем данные по ссылкам обработали а вторая вот commit этого все то что мы его обработали данном случае у нас происходит семантика этот лист vans при этом возможно дубли как каким образом происходит но представьте мы взяли три сообщения начинаем их обрабатывать первые два обработали и свалились то есть мы языками тилида при этом первые два обработали из пачки пристройки тогда пропасти перезапуска у нас комитета все еще был там на предыдущий мы опять прочитываете три сообщения и нам нужно разбираться мы первые два уже обрабатывали или нет если мы обеспечиваем для pantene масть-то проблем нету но нужно в любом случае мы мы мы тут можем получить из кафки дубликат вот это мост вантед листва на эти два режима не обеспечивает куда производительность были более-менее до приемлемую но бывает нужно экз актау once то есть мы не хотим никаких дублей мы не хотим терять сообщение как этого достичь если это требуется то есть любой вариант работы с of сетами это свой какой-то процесс и там свое хранилище в сетов то есть мы не полагаемся на этот топик офсет каста миров z которые системны да а мы сами эти abs это день храни в базе данных файле или еще где-то и таким образом мы когда подключаемся консью миру мы не полагаемся на автоматически вот этот сайт который определяется а мой просто говорим всегда нам нужны данные начиная с этого все то мы получили сказки данные обработали у себя сохранили этот офсет каким-то образом до автомата акции или еще что-то после этого мы когда идем консьюмер опять говорит нам нужно данным уже там снова все то и таким образом мы всегда передаем заодно и все они так что он автоматически определяется из этой a set of set топика этого значит 10 обеспечивается газа клеманс но это сложный механизм да потому что нужно каким-то образом кассано реализовать еще и надежно в транзакциях вот ну да ну здесь не теряется нет дубликатов значит бывает такая история что офсет может праздник для консилер группы вот особей я не знаю последней версии это так но до версии там 21 это точно так было значит в и есть такая настройка луковки of seeds are things in mens да помоему получение сейчас семь дней в версии там 0 10 лет какой-то там он был вообще ге-гей о чем говорить что если у нас кончина группа не подключалась партиции больше чем это время до было неактивной то этот офсет он удаляется из к somerset тогда после того как реанимируем наш костюме группы она снова захочет работу допустим спустя семь дней она не найдет офсет в этом топике каста мерсед и по идее нужно понять а что мне делать да и для этого используется другая настройка которые в кафки есть это авто все 3z это знает окрас такой ситуации когда консилер знает что ему делать которой начинать и он просто идет в эту настройку и смотрит а может быть два значения либо р лист либо lightest юрист говорит о том что мы всегда начинаем с самого первого сообщение которое доступно до сейчас в топике all else говорит мне нужно только самое последнее то есть то что сеть не интересует то что новый будет приходить мне передавай вот вот эти две стратегии они могут быть указано этой настройки если вдруг мы не нашли в касмир сердца все то мы как бы использовать эту настройку так теперь немного перфомансе кафки да почему она считается бы если она на самом деле очень быстрая она быстро за счет своей архитектурой масштабируемой также это может показаться что мы пишем файлы это медленная процедура работу с файлом на самом деле мы пишем и читаем последовательно то есть есть рэндом рид это медленный рид когда нам нужно с эффектом головки дело до у жесткого диска а бывает просто мы пишем последовательно его последовательно это уже получается довольно быстро при этом там из того что мы читаем концу мерами обычно то что вот последнее записалась там используется также кэширование страниц в памяти также есть такая фича к визира копия там это такая система еще операционной системы когда оба обычный процесс как выглядит наш есть наш кафка брокер он собственно засчитывает из файла страницу там памяти до но она может быть памяти можете памяти носим на страницу памяти начну отправляет в клиентские соки сообщения консьюмер например и вот этот посредник applications он получается добавляет большой вверх от и вот вы person всем гладкая штука сделает нулевое копирование когда мы копируем данные из пейдж memory сразу в соке клиента в обход приложения из такая фича и кафка красота же ты в чае пользуются ей можно пользоваться в том случае если нету преобразования данных а в кафки как раз такой случай то есть продюсер то что управляет кольцу мир именно это и должен получить никаких трансформаций внутри кафки не должно производиться и вот здесь как раз и и рукой очень подходит файла поднимала страница она сразу отправилась в клиентский sockets так но и очень очень много всяких настроек есть на различные кейсы на разные семантики доставки вот я говорил там заклевал ансат листву once очень много всяких штук по тайм аутом и прочему по одну продюсеру там если посмотреть там не знаю стопка очень большая всяких настроек поэтому если мы знаем наш психический кейс можем и он на тюнить подтюнить очень хорошо ну это года подведем итог значит кафка это очень популярный инструмент это очень надежное проверенное решение очень высокопроизводительный инструмент миллион сообщение секунду миг обрабатывать а кафка широковещательная с упорядочение да то есть мы можем отправлять и потребителей может быть много у одного и того же сообщения и обеспечить упорядоченный на уровне партиции также очень большая интегрированность с разной металлами с разными базами данных системами и прочим очень гибкой конфигурации настроек просто тому большая куча но понятно нужно понимать нюансы то есть если просто так по дефолту взять может оказаться не то что ну да нужно например продюсер падает до это допустим из того что если нг реплики неправильно устроены или получается но таки или перегружены опять нужно смотреть балансировка неправильно калязина возможно и прочее тут как бы кафку нужно уметь готовить как со стороны сама собственно сама кафки брокеров так и со стороны продюсеров кантемиров да потому что я показал если после тяжелой операции печь метаданных нужно понимать что нужно нам и каждое сообщение создавать новый нового клиента нужно пользоваться уже существующим благо там джаве кафка продюсером 3 то есть меня думать можно отправлять через один кафка продюсер из множества потоков сообщения так ну собственно и все это мой был последний слайд всем спасибо