Apache Kafka. Потоковая обработка и анализ данных. Apache Kafka. Потоковая обработка и анализ данныхСерия Бестселлеры OReilly
Скачать 7.59 Mb.
|
137 Как происходит сжатие Каждый.из.журналов.условно.делится.на.две.части.(рис..5.7): «чистая».—.сжатые.ранее.сообщения..Она.содержит.только.по.одному.значению. для.каждого.ключа.—.последнему.на.момент.предыдущего.сжатия; «грязная».—.сообщения,.записанные.после.последнего.сжатия. Рис. 5.7. Журнал с «чистым» и «грязным» разделами Если.при.запуске.Kafka.сжатие.было.активировано.(с.помощью.довольно.не- удачно.названного.параметра. log.cleaner.enabled ),.то.каждый.из.брокеров.будет. запущен.с.потоком.диспетчера.сжатия.и.несколькими.потоками.сжатия,.которые. отвечают.за.выполнение.задач.сжатия..Каждый.из.этих.потоков.выбирает.раздел. с.максимальным.отношением.числа.«грязных».сообщений.к.полному.размеру.раз- дела.и.очищает.его. Для.сжатия.раздела.поток.очистки.читает.его.«грязную».часть.и.создает.ассоци- ативный.массив.(карту).в.оперативной.памяти..Каждая.запись.этого.массива.со- стоит.из.16-байтного.хеша.ключа.сообщения.и.8-байтного.смещения.предыдущего. сообщения.с.тем.же.ключом..Это.значит,.что.каждая.запись.массива.использует. только.24.байта..Если.мы.предположим,.что.в.сегменте.размером.1.Гбайт.каждое. сообщение.занимает.1.Кбайт,.то.сегмент.может.содержать.1.млн.сообщений,.а.для. его.сжатия.понадобится.ассоциативный.массив.всего.в.24.Мбайт.(возможно,.даже. намного.меньше.—.при.повторении.ключей.одни.и.те.же.хеш-записи.будут.часто. использоваться.повторно.и.займут.меньше.памяти)..Весьма.эффективно! При.настройке.Kafka.администратор.задает.объем.памяти,.который.потоки.сжатия. могут.задействовать.для.этой.карты.смещений..И.хотя.у.каждого.потока.будет. своя.карта,.соответствующий.параметр.задает.для.всех.них.общий.объем.памяти.. Если.задать.его.равным.1.Гбайт.при.пяти.потоках.очистки,.каждый.из.них.полу- чит.200.Мбайт.памяти.для.своего.ассоциативного.массива..Для.Kafka.необяза- тельно,.чтобы.вся.«грязная».часть.раздела.помещалась.в.выделенное.для.этого. ассоциативного.массива.пространство,.но.по.крайней.мере.один.полный.сегмент. туда.помещаться.должен..Если.это.не.так,.Kafka.зафиксирует.в.журнале.ошибку. и.администратору.придется.или.выделить.больше.памяти.под.карты.смещений,. 138 Глава 5 • Внутреннее устройство Kafka или.использовать.меньше.потоков.очистки..Если.помещается.лишь.несколько.сег- ментов,.Kafka.начнет.со.сжатия.самых.старых.сегментов.ассоциативного.массива.. Остальные.останутся.«грязными»,.им.придется.подождать.следующего.сжатия. После.того.как.поток.очистки.сформирует.карту.смещений,.он.начнет.считывать. «чистые».сегменты,.начиная.с.самого.старого,.и.сверять.их.содержимое.с.картой. смещений..Для.каждого.сообщения.поток.очистки.проверяет,.существует.ли.ключ. сообщения.в.карте.смещений..Если.его.нет,.значит,.значение.только.что.прочитан- ного.сообщения.актуальное,.поэтому.сообщение.копируется.в.сменный.сегмент.. Если.же.ключ.в.карте.присутствует,.оно.пропускается,.поскольку.далее.в.этом. разделе.есть.сообщение.с.таким.же.ключом,.но.с.более.свежим.значением..После. копирования.всех.сообщений,.содержащих.актуальные.ключи,.мы.меняем.сменный. сегмент.местами.с.исходным.и.переходим.к.следующему.сегменту..В.конце.этого. процесса.для.каждого.ключа.остается.одно.значение.—.наиболее.новое.(рис..5.8). Рис. 5.8. Сегмент раздела до и после сжатия Удаленные события Допустим,.мы.всегда.сохраняем.последнее.сообщение.для.каждого.ключа..Тогда.что. делать,.если.нужно.удалить.все.сообщения.для.конкретного.ключа,.например,.если. пользователь.перестал.у.нас.обслуживаться.и.мы.по.закону.обязаны.убрать.все.его. следы.из.системы? Чтобы.удалить.ключ.из.системы.полностью,.без.сохранения.даже.последнего.со- общения,.приложение.должно.сгенерировать.сообщение,.содержащее.этот.ключ,. и.пустое.значение..Наткнувшись.на.подобное.сообщение,.поток.очистки.сначала. выполнит.обычное.сжатие.и.сохранит.только.сообщение.с.пустым.значением.. Это.особое.сообщение,.известное.как.отметка об удалении.(tombstone),.будет.хра- ниться.в.течение.настраиваемого.промежутка.времени..На.всем.его.протяжении.по- требители.смогут.видеть.это.сообщение.и.будут.знать,.что.значение.удалено..Так.что. Резюме 139 потребитель,.копирующий.данные.из.Kafka.в.реляционную.базу.данных,.увидит. отметку.об.удалении.и.будет.знать,.что.нужно.убрать.пользователя.из.базы.данных.. По.истечении.этого.промежутка.времени.поток.очистки.удалит.сообщение.—.отметку. об.удалении,.и.ключ.пропадет.из.раздела.Kafka..Важно.выделить.достаточно.времени,. чтобы.потребители.успели.увидеть.его,.ведь.если.потребитель.не.функционировал. несколько.часов.и.пропустил.это.сообщение,.он.просто.не.увидит.ключа.и.не.будет. знать,.что.тот.был.удален.из.Kafka.и.нужно.удалить.его.из.базы.данных. Когда выполняется сжатие тем Подобно.тому.как.при.стратегии. delete .никогда.не.удаляются.активные.в.на- стоящий.момент.сегменты,.при.стратегии. compact .никогда.не.сжимается.текущий. сегмент..Сжатие.сообщений.возможно.только.в.неактивных.сегментах. В.версии.0.10.0.и.более.старых.Kafka.начинает.сжатие,.когда.50.%.темы.содержит. «грязные».сообщения..Задача.заключается.в.том,.чтобы.не.сжимать.слишком.ча- сто.—.это.может.негативно.повлиять.на.производительность.чтения/записи.для. данной.темы,.но.и.не.хранить.слишком.много.«грязных».сообщений,.поскольку.они. занимают.место.на.диске..Разумный.компромисс.состоит.в.том,.чтобы.дождаться,. когда.«грязные».записи.займут.50.%.используемого.темой.дискового.пространства,. после.чего.сжать.их.за.один.раз..Этот.параметр.настраивает.администратор. В.будущих.версиях.мы.планируем.добавить.период.отсрочки,.на.протяжении.кото- рого.гарантируется,.что.сообщения.не.будут.сжаты..Благодаря.этому.приложениям,. которым.необходимо.просмотреть.каждое.записанное.в.тему.сообщение,.хватит. времени,.даже.если.они.несколько.отстают. Резюме Тема.внутреннего.устройства.Kafka.намного.обширнее,.чем.можно.было.охватить. в.этой.главе..Но.мы.надеемся,.что.вы.смогли.прочувствовать.реализованные.во.вре- мя.работы.над.Kafka.проектные.решения.и.оптимизации.и,.вероятно,.разобрались. в.некоторых.малопонятных.видах.ее.поведения.и.настроек. Если.внутреннее.устройство.Kafka.вас.действительно.интересует,.никакого.дру- гого.выхода,.кроме.чтения.кода,.нет..Среди.разработчиков.Kafka.(почтовая.рас- сылка. dev@kafka.apache.org ).—.очень.дружелюбного.сообщества.—.всегда.найдется. кто-нибудь,.готовый.ответить.на.вопросы.о.функционировании.платформы..А.во. время.чтения.кода,.возможно,.вы.сумеете.исправить.одну-две.ошибки.—.проекты. с.открытым.исходным.кодом.всегда.приветствуют.любую.помощь. 6 Надежная доставка данных Надежная.доставка.данных.относится.к.числу.тех.неотъемлемых.свойств.системы,. проектирование.которых.нельзя.оставить.на.потом..Как.и.производительность,. она.должна.учитываться.в.системе,.начиная.с.самой.первой.схемы.работы..Надеж- ность.не.получится.«прикрутить».к.уже.готовому.продукту..Более.того,.это.свой- ство.всей.системы,.а.не.отдельного.компонента,.так.что.хотя.мы.будем.говорить. о.гарантиях.надежности.Apache.Kafka,.но.нужно.учитывать.всю.систему.в.целом. и.сценарии.ее.использования..В.том,.что.касается.надежности,.интегрируемые. с.Kafka.системы.так.же.важны,.как.и.сама.Kafka..А.поскольку.надежность.отно- сится.к.системе.в.целом,.ответственность.за.нее.не.может.лежать.на.одном.чело- веке..Все.—.администраторы.Kafka,.администраторы.Linux,.администраторы.сети. и.систем.хранения,.а.также.разработчики.приложения.—.должны.сотрудничать. для.создания.надежного.продукта. Apache.Kafka.очень.гибка.в.том,.что.касается.надежной.доставки.данных..У.Kafka. есть.множество.сценариев.использования,.начиная.от.отслеживания.нажатий.на. веб-сайте.и.заканчивая.оплатой.по.кредитным.картам..Некоторые.из.этих.сцена- риев.требуют.максимальной.надежности,.а.для.других.важнее.быстродействие. и.простота..Kafka.спроектирована.в.расчете.на.довольно.широкие.возможности. настройки,.а.ее.клиентский.API.достаточно.гибок.для.любых.компромиссов.. Его.гибкость.может.оказаться.ахиллесовой.пятой.Kafka.—.легко.можно.счесть.на- дежной.на.самом.деле.ненадежную.систему. Эту.главу.мы.начнем.с.обсуждения.различных.видов.надежности.и.их.значения. в.контексте.Apache.Kafka..Затем.поговорим.о.механизме.репликации.Kafka.и.его. вкладе.в.надежность.системы..Потом.обсудим.брокеры.и.темы.Kafka.и.их.настройку. для.различных.сценариев..Затем.рассмотрим.клиенты,.производители.и.потреби- тели,.а.также.их.правильное.использование.в.различных.ситуациях,.связанных. с.надежностью..И.наконец,.обсудим.тему.проверки.надежности.системы,.поскольку. недостаточно.верить,.что.система.надежна,.—.необходимо.знать.это.наверняка. Гарантии надежности 141 Гарантии надежности При.разговоре.о.надежности.речь.обычно.идет.в.терминах.гарантий,.означающих,. что.поведение.системы.гарантированно.не.меняется.при.различных.обстоятель- ствах. Вероятно,.лучшая.из.известных.гарантий.надежности.—.ACID,.стандартная.га- рантия.надежности,.поддерживаемая.практически.всеми.реляционными.базами. данных..Этот.акроним.расшифровывается.как.Atomicity,.Consistency,.Isolation,. Durability.—.атомарность,.согласованность,.изоляция.и.сохраняемость..Если.про- изводитель.СУБД.говорит,.что.их.база.данных.удовлетворяет.ACID,.значит,.она. гарантирует.определенное.поведение.относительно.транзакций. Благодаря.этим.гарантиям.люди.доверяют.реляционным.базам.данных,.имеющим- ся.в.наиболее.критичных.приложениях,.—.они.точно.знают,.что.обещает.система. и.как.она.будет.вести.себя.в.различных.условиях..Эти.гарантии.понятны.и.позво- ляют.писать.на.их.основе.безопасные.приложения. Понимание.того,.в.чем.состоят.предоставляемые.Kafka.гарантии,.чрезвычайно. важно.для.желающих.создавать.надежные.приложения..Это.позволяет.разработ- чикам.системы.предугадать.ее.поведение.в.случае.различных.сбоев..Итак,.что.же. гарантирует.Apache.Kafka? Упорядоченность.сообщений.в.разделе..Если.сообщение.Б.было.записано.после. сообщения.A.с.помощью.одного.производителя.в.одном.разделе,.то.Kafka.га- рантирует,.что.смещение.сообщения.Б.будет.превышать.смещение.сообщения.A. и.потребители.прочитают.сообщение.Б.после.сообщения.A. Сообщения.от.производителей.считаются.зафиксированными,.когда.они.за- писаны.во.все.согласованные.реплики.раздела,.но.не.обязательно.уже.сбро- шены.на.диск..Производители.могут.выбирать.разные.варианты.оповещения. о.получении.сообщений:.при.полной.фиксации.сообщения,.записи.на.ведущую. реплику.или.отправке.по.сети. Зафиксированные.сообщения.не.будут.потеряны,.если.функционирует.хотя.бы. одна.реплика. Потребители.могут.читать.только.зафиксированные.сообщения. Эти.основные.гарантии.можно.использовать.при.создании.надежной.системы,.но. сами.по.себе.они.не.делают.ее.абсолютно.надежной..Создание.надежной.системы. допускает.различные.компромиссы,.и.Kafka.дает.возможность.администраторам. и.разработчикам.самим.определять,.насколько.надежная.система.им.требуется,. с.помощью.задания.параметров.конфигурации,.контролирующих.эти.компро- миссы..Обычно.речь.идет.о.компромиссе.между.степенью.важности.надежного. и.согласованного.хранения.сообщений.и.другими.важными.соображениями,.та- кими.как.доступность,.высокая.пропускная.способность,.малое.значение.задержки. 142 Глава 6 • Надежная доставка данных и.стоимость.аппаратного.обеспечения..Далее.мы.рассмотрим.механизм.репликации. Kafka,.познакомим.вас.с.терминологией.и.обсудим.фундамент.надежности.плат- формы..После.этого.пройдемся.по.упомянутым.параметрам.конфигурации. Репликация В.основе.гарантий.надежности.Kafka.лежит.механизм.репликации,.предусматри- вающий.создание.нескольких.реплик.для.каждого.раздела..Kafka.обеспечивает. сохраняемость.сообщений.в.случае.аварийного.сбоя.благодаря.записи.сообщений. в.несколько.реплик. Мы.детально.рассмотрели.механизм.репликации.Kafka.в.главе.5,.а.здесь.вкратце. резюмируем.основные.положения. Темы.Kafka.разбиваются.на.разделы,.представляющие.собой.основные.стандарт- ные.блоки.данных..Разделы.сохраняются.на.отдельные.диски..Kafka.гарантирует. упорядоченность.событий.в.пределах.раздела,.который.может.быть.подключен. (доступен).или.отключен.(недоступен)..У.каждого.раздела.может.быть.несколько. реплик,.одна.из.которых.назначается.ведущей..Все.события.направляются.произ- водителями.в.ведущую.реплику.и.потребляются.из.нее..Другие.реплики.просто. должны.быть.согласованы.с.ведущей.и.своевременно.реплицировать.все.недавние. события..В.случае.недоступности.ведущей.реплики.одна.из.согласованных.стано- вится.новой.ведущей. Реплика.считается.согласованной,.если.она.является.ведущей.репликой.раздела. или.ведомой,.которая: отправляла.в.ZooKeeper.контрольный.сигнал.в.последние.6.секунд.(настраива- ется),.что.означает.наличие.текущего.сеанса.связи.с.ZooKeeper; извлекала.сообщения.из.ведущей.реплики.в.последние.10.секунд.(настраива- ется); извлекала.наиболее.свежие.сообщения.из.ведущей.реплики.в.последние.10.се- кунд.(настраивается)..То.есть.недостаточно,.чтобы.ведомая.реплика.продолжала. получать.сообщения.от.ведущей,.требуется.еще.и.отсутствие.задержки. Если.реплика.теряет.соединение.с.ZooKeeper,.прекращает.извлекать.новые.со- общения.или.отстает.более.чем.на.10.секунд,.она.считается.рассогласованной.. И.снова.становится.согласованной.после.повторного.подключения.к.ZooKeeper. и.догоняет.ведущую.вплоть.до.самого.свежего.сообщения..Обычно.это.происхо- дит.довольно.быстро.после.восстановления.сети.после.временных.неполадок,.но. может.занять.и.много.времени,.если.брокер,.на.котором.находится.реплика,.долго. не.работал. Настройка брокера 143 Рассогласованные реплики Картина, при которой одна или несколько реплик быстро перепрыгивают из согласованного состояния в рассогласованное и наоборот, — верный признак проблем с кластером. Причина часто заключается в неправильной настройке сборки мусора Java на брокере. Неправильная настройка сборки мусора может вызвать приостановку работы брокера на несколько секунд, за время которой он теряет подключение к ZooKeeper. А когда брокер Kafka теряет подключение к ZooKeeper, то становится рассогласованным с кластером, что и обусловливает описанное поведение. Чуть-чуть.отстающая.согласованная.реплика.может.замедлять.работу.производи- телей.и.потребителей,.поскольку.они.считают.сообщение.зафиксированным.только. после.его.получения.всеми.согласованными.репликами..А.когда.реплика.становит- ся.рассогласованной,.то.ждать.получения.ею.сообщений.не.надо..Она.по-прежнему. отстает,.но.на.производительность.это.больше.не.влияет..Нюанс.в.том,.что.чем. меньше.согласованных.реплик,.тем.ниже.фактический.коэффициент.репликации,. а.следовательно,.выше.риск.простоя.или.потери.данных. В.следующем.разделе.мы.увидим,.что.это.значит.на.практике. Настройка брокера На.поведение.Kafka.в.смысле.надежного.хранения.сообщений.влияют.три.пара- метра.конфигурации..Как.и.многие.другие.переменные.конфигурации.брокера,. их.можно.использовать.на.уровне.брокера.для.управления.настройками.всех.тем. системы,.а.также.на.уровне.отдельных.тем. Возможность.управлять.связанными.с.надежностью.компромиссами.на.уровне. отдельных.тем.означает,.что.один.и.тот.же.кластер.Kafka.можно.задействовать. как.для.надежных,.так.и.для.ненадежных.тем..Например,.в.банке.администратор,. вероятно,.захочет.установить.очень.высокий.уровень.надежности.по.умолчанию. для.всего.кластера,.за.исключением.тем,.в.которых.хранятся.жалобы.пользователей,. где.определенные.потери.данных.допустимы. Рассмотрим.эти.параметры.по.очереди.и.выясним,.как.они.влияют.на.надежность. хранения.данных.в.Kafka.и.на.какие.компромиссы.приходится.идти. Коэффициент репликации Соответствующий.параметр.уровня.темы.называется. replication.factor ..А.на. уровне.брокера.для.автоматически.создаваемых.тем.используется.параметр. default.replication.factor 144 Глава 6 • Надежная доставка данных До.сих.пор.мы.предполагали,.что.коэффициент.репликации.тем.равен.3,.то.есть. каждый.раздел.реплицируется.три.раза.на.трех.различных.брокерах..Это.было. вполне.разумное.допущение,.соответствующее.умолчаниям.Kafka,.но.пользовате- ли.могут.менять.это.поведение..Даже.после.создания.темы.можно.добавлять.или. удалять.реплики,.меняя.таким.образом.коэффициент.репликации. Коэффициент.репликации.N.означает.возможность.потери.N.–.1.брокеров.при. сохранении.надежности.чтения.из.темы.и.записи.в.нее..Так.что.повышение.коэф- фициента.репликации.означает.повышение.доступности.и.надежности.и.сниже- ние.количества.аварийных.ситуаций..В.то.же.время.для.обеспечения.равного.N. коэффициента.репликации.вам.понадобится.как.минимум.N.брокеров.и.придется. хранить.N.копий.данных,.то.есть.нужно.будет.в.N.раз.больше.дискового.простран- ства..Фактически.мы.повышаем.доступность.за.счет.дополнительного.аппаратного. обеспечения. Так.как.же.определить.правильное.число.реплик.для.темы?.Ответ.зависит.от. степени.ее.важности.и.от.ресурсов,.которые.вы.готовы.потратить.для.повышения. доступности..А.также.от.уровня.вашей.паранойи. Если.вас.устраивает,.что,.возможно,.конкретная.тема.будет.недоступна.при.пере- запуске.отдельного.брокера.(это.нормально.при.обычном.функционировании. кластера),.то.вполне.будет.достаточно.коэффициента.репликации.1..Не.забудьте. убедиться,.что.ваше.начальство.и.пользователей.также.устраивает.этот.компро- мисс,.—.вы.экономите.на.жестких.дисках.или.серверах,.но.теряете.высокую.доступ- ность..Коэффициент.репликации.2.означает:.потеря.одного.брокера.не.страшна,. что.представляется.вполне.достаточным..Однако.не.забывайте:.потеря.одного. брокера.(особенно.на.старых.версиях.Kafka).может.сделать.кластер.нестабильным,. вследствие.чего.придется.перезапустить.еще.один.брокер.—.контроллер.Kafka.. Это.значит,.что.при.коэффициенте.репликации.2.для.восстановления.после.воз- никшей.проблемы.может.понадобиться.перевести.систему.в.состояние.недоступ- ности..Непростой.выбор. Поэтому.мы.рекомендуем.использовать.коэффициент.репликации.3.для.всех.тем,. для.которых.важна.доступность..В.редких.случаях.это.считается.недостаточно. безопасным.вариантом:.мы.встречали.банки,.в.которых.для.критично.важных.тем. создавались.пять.реплик,.просто.на.всякий.случай. Размещение.реплик.также.играет.важную.роль..По.умолчанию.Kafka.размещает. каждую.реплику.раздела.на.отдельном.брокере..Однако.в.некоторых.случаях.этот. вариант.недостаточно.безопасен..Если.все.реплики.раздела.размещены.на.брокерах. в.одной.стойке,.в.случае.сбоя.коммутатора.top-of-rack.раздел.станет.недоступен. вне.зависимости.от.коэффициента.репликации..Для.защиты.от.подобных.проблем. на.уровне.стойки.мы.рекомендуем.распределять.брокеры.по.нескольким.стойкам. и.использовать.параметр.конфигурации.брокеров. broker.rack ,.чтобы.задавать.на- звание.стойки.для.каждого.брокера..При.заданных.названиях.стоек.Kafka.обеспечит. |