Apache Kafka. Потоковая обработка и анализ данных. Apache Kafka. Потоковая обработка и анализ данныхСерия Бестселлеры OReilly
Скачать 7.59 Mb.
|
60 Глава 2 • Установка Kafka Диск Если.не.считать.выбора.аппаратного.обеспечения.подсистемы.жестких.дисков,. а.также.конфигурации.RAID-массива.в.случае.его.использования,.сильнее.всего. влияет.на.производительность.применяемая.для.этих.дисков.файловая.система.. Существует.множество.разных.файловых.систем,.но.в.качестве.локальной.чаще. всего.задействуется.EXT4.(fourth.extended.file.system.—.четвертая.расширенная. файловая.система).или.XFS.(Extents.File.System.—.файловая.система.на.основе. экстентов)..EXT4.работает.довольно.хорошо,.но.требует.потенциально.небез- опасных.параметров.тонкой.настройки..Среди.них.установка.более.длительного. интервала.фиксации,.чем.значение.по.умолчанию.(5),.с.целью.понижения.частоты. сброса.на.диск..В.EXT4.также.появилось.отложенное.выделение.блоков,.повы- шающее.вероятность.потери.данных.и.повреждения.файловой.системы.в.случае. системного.отказа..В.файловой.системе.XFS.также.используется.алгоритм.отло- женного.выделения,.но.более.безопасный,.чем.в.EXT4..Производительность.XFS. для.типичной.нагрузки.Kafka.тоже.выше,.причем.нет.необходимости.производить. тонкую.настройку.сверх.автоматической,.выполняемой.самой.файловой.системой.. Она.эффективнее.также.при.пакетных.операциях.записи.на.диск,.объединяемых. для.повышения.пропускной.способности.при.вводе/выводе. Вне.зависимости.от.файловой.системы,.выбранной.в.качестве.точки.монтирова- ния.для.сегментов.журналов,.рекомендуется.указывать.параметр.монтирования. noatime ..Метаданные.файла.содержат.три.метки.даты/времени:.время.создания. ( ctime ),.время.последнего.изменения.( mtime ).и.время.последнего.обращения.к.фай- лу.( atime )..По.умолчанию.значение.атрибута. atime .обновляется.при.каждом.чтении. файла..Это.значительно.увеличивает.число.операций.записи.на.диск..Атрибут. atime обычно.не.слишком.полезен,.за.исключением.случая,.когда.приложению.необхо- дима.информация.о.том,.обращались.ли.к.файлу.после.его.последнего.изменения. (в.этом.случае.можно.применить.параметр. realtime )..Kafka.вообще.не.использу- ет.атрибут. atime ,.так.что.можно.спокойно.его.отключить..Установка.параметра. noatime .для.точки.монтирования.предотвращает.обновления.меток.даты/времени,. но.не.влияет.на.корректную.обработку.атрибутов. ctime .и. mtime Передача данных по сети Корректировка.настроек.по.умолчанию.сетевого.стека.Linux.—.обычное.дело.для. любого.приложения,.генерирующего.много.сетевого.трафика,.так.как.ядро.по. умолчанию.не.приспособлено.для.высокоскоростной.передачи.больших.объемов. данных..На.деле.рекомендуемые.для.Kafka.изменения.не.отличаются.от.изменений,. рекомендуемых.для.большинства.веб-серверов.и.других.сетевых.приложений.. Вначале.необходимо.изменить.объемы.(по.умолчанию.и.максимальный).памяти,. выделяемой.для.буферов.отправки.и.получения.для.каждого.сокета..Это.значи- тельно.увеличит.производительность.в.случае.передачи.больших.объемов.данных.. Соответствующие.параметры.для.значений.по.умолчанию.буферов.отправки. Промышленная эксплуатация 61 и.получения.каждого.сокета.называются. net.core.wmem_default .и. net.core.rmem_ default .соответственно,.а.разумное.их.значение.будет.2.097.152.(2.Мбайт)..Имейте. в.виду,.что.максимальный.размер.не.означает.выделения.для.каждого.буфера.та- кого.пространства,.а.лишь.позволяет.сделать.это.при.необходимости. Помимо.настройки.сокетов.необходимо.отдельно.задать.размеры.буферов.от- правки.и.получения.для.сокетов.TCP.с.помощью.параметров. net.ipv4.tcp_wmem и. net.ipv4.tcp_rmem ..В.них.указываются.три.разделенных.пробелами.целых.числа,. определяющих.минимальный.размер,.размер.по.умолчанию.и.максимальный.раз- мер.соответственно..Пример.этих.параметров.—. 4096 65536 2048000 .—.означает,. что.минимальный.размер.буфера.4.Кбайт,.размер.по.умолчанию.—.64.Кбайт,. а.максимальный.—.2.Мбайт..Максимальный.размер.не.может.превышать.значений,. задаваемых.для.всех.сокетов.параметрами. net.core.wmem_max .и. net.core.rmem_max В.зависимости.от.настоящей.загрузки.ваших.брокеров.Kafka.может.понадобиться. увеличить.максимальные.значения.для.повышения.степени.буферизации.сетевых. соединений. Существует.еще.несколько.полезных.сетевых.параметров..Можно.включить.оконное. масштабирование.TCP.путем.установки.значения. 1 .параметра. net.ipv4.tcp_win- dow_scaling ,.что.позволит.клиентам.передавать.данные.эффективнее.и.обеспечит. возможность.буферизации.этих.данных.на.стороне.брокера..Значение.параметра. net.ipv4.tcp_max_syn_backlog .большее,.чем.принятое.по.умолчанию. 1024 ,.по- зволяет.повысить.число.одновременных.подключений..Значение.параметра. net.core.netdev_max_backlog ,.превышающее.принятое.по.умолчанию. 1000 ,.может. помочь.в.случае.всплесков.сетевого.трафика,.особенно.при.скоростях.сетевого. подключения.порядка.гигабит,.благодаря.увеличению.количества.пакетов,.поме- щаемых.в.очередь.для.последующей.обработки.ядром. Промышленная эксплуатация Когда.наступит.время.перевести.среду.Kafka.из.режима.тестирования.в.промыш- ленную.эксплуатацию,.для.настройки.надежного.сервиса.обмена.сообщениями. останется.позаботиться.лишь.еще.о.нескольких.моментах. Параметры сборки мусора Тонкая.настройка.сборки.мусора.Java.для.приложения.всегда.была.своеобразным. искусством,.требующим.подробной.информации.об.использовании.памяти.прило- жением.и.немалой.толики.наблюдений,.проб.и.ошибок..К.счастью,.это.изменилось. после.выхода.Java.7.и.появления.сборщика.мусора.Garbage.First.(G1)..G1.умеет. автоматически.приспосабливаться.к.различным.типам.нагрузки.и.обеспечивать. согласованность.пауз.на.сборку.мусора.на.протяжении.всего.жизненного.цикла. приложения..Он.также.с.легкостью.управляется.с.кучей.большого.размера,.так.как. 62 Глава 2 • Установка Kafka разбивает.ее.на.небольшие.зоны,.вместо.того.чтобы.собирать.мусор.по.всей.куче. при.каждой.паузе. В.обычном.режиме.работы.для.выполнения.всего.этого.G1.требуются.минималь- ные.настройки..Для.корректировки.его.производительности.используются.два. параметра. MaxGCPauseMillis ..Задает.желаемую.длительность.паузы.на.каждый.цикл.сбор- ки.мусора..Это.не.фиксированный.максимум.—.при.необходимости.G1.может. превысить.эту.длительность..По.умолчанию.данное.значение.равно.200.мс.. Это.значит,.что.G1.будет.стараться.планировать.частоту.циклов.сборки.мусора,. а.также.числа.зон,.обрабатываемых.в.каждом.цикле,.так,.чтобы.каждый.цикл. занимал.примерно.200.мс. InitiatingHeapOccupancyPercent ..Задает.долю.в.процентах.от.общего.размера. кучи,.до.превышения.которой.сборка.мусора.не.начинается..Значение.по.умол- чанию.равно.45..Это.значит,.что.G1.не.запустит.цикл.сборки.мусора.до.того,.как. будет.использоваться.45.%.кучи,.включая.суммарное.использование.зон.как. новых.(Eden),.так.и.старых.объектов. Брокер.Kafka.весьма.эффективно.использует.память.из.кучи.и.создает.объекты,.так. что.можно.задавать.более.низкие.значения.этих.параметров..Приведенные.в.дан- ном.разделе.значения.параметров.сборки.мусора.признаны.вполне.подходящими. для.сервера.с.64.Гбайт.оперативной.памяти,.где.Kafka.работала.с.кучей.размером. 5.Гбайт..Этот.брокер.мог.работать.при.значении. 20 .параметра. MaxGCPauseMillis А.значение.параметра. InitiatingHeapOccupancyPercent .установлено.в. 35 ,.благодаря. чему.сборка.мусора.запускается.несколько.раньше,.чем.при.значении.по.умолчанию. Сценарий.запуска.Kafka.по.умолчанию.использует.не.сборщик.мусора.G1,.а.но- вый.параллельный.сборщик.мусора.и.конкурентный.сборщик.мусора.маркировки. и.очистки..Это.можно.легко.изменить.посредством.переменных.среды..Изменим. приведенную.ранее.команду.запуска.следующим.образом: # export JAVA_HOME=/usr/java/jdk1.8.0_51 # export KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+DisableExplicitGC -Djava.awt.headless=true" # /usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties # Планировка ЦОД При.использовании.ориентированных.на.разработку.систем.физическое.располо- жение.брокеров.Kafka.в.ЦОД.особого.значения.не.имеет,.так.как.частичная.или. полная.недоступность.кластера.в.течение.коротких.промежутков.времени.влияет. на.работу.не.сильно..Однако.при.промышленной.эксплуатации.простой.в.процессе. выдаче.данных.означает.потерю.денег.из-за.невозможности.или.обслужить.поль- Промышленная эксплуатация 63 зователей,.или.получить.телеметрию.их.действий..При.этом.возрастает.важность. использования.репликации.в.кластере.Kafka.(см..главу.6),.а.также.физического. расположения.брокеров.в.стойках.в.ЦОД..Если.не.позаботиться.об.этом.до.раз- вертывания.Kafka,.могут.потребоваться.дорогостоящие.работы.по.перемещению. серверов. Брокер.Kafka.ничего.не.знает.о.размещении.по.стойкам.во.время.назначения.но- вых.разделов.брокерам,.а.значит,.он.не.способен.учесть.возможное.расположение. двух.брокеров.в.одной.физической.стойке.или.в.одной.и.той.же.зоне.доступности. (при.работе.в.облачном.сервисе,.например,.AWS),.вследствие.чего.может.случайно. поставить.все.реплики.раздела.в.соответствие.брокерам,.использующим.в.одной. стойке.одни.и.те.же.сетевые.и.силовые.подключения..В.случае.отказа.этой.стойки. разделы.окажутся.недоступными.для.клиентов..Кроме.того,.в.результате.«нечи- стых».выборов.ведущего.узла.это.может.привести.к.дополнительной.потере.данных. на.восстановление.(см..подробности.в.главе.6). Рекомендуемая.практика:.установка.каждого.брокера.Kafka.в.кластере.в.отдельной. стойке.или,.по.крайней.мере,.использование.ими.различных.критических.точек. инфраструктурных.сервисов,.таких.как.питание.и.сеть..Обычно.это.означает.как. минимум.использование.для.брокеров.серверов.с.резервным.питанием.(подклю- чение.к.двум.разным.цепям.электропитания).и.двойных.сетевых.коммутаторов. с.объединенным.интерфейсом.к.самим.серверам.для.переключения.на.другой.ин- терфейс.без.перебоев.в.работе..Время.от.времени.может.понадобиться.выполнить. обслуживание.аппаратной.части.стойки.или.шкафа.с.их.отключением,.например,. передвинуть.сервер.или.заменить.электропроводку. Размещение приложений на ZooKeeper Kafka.использует.ZooKeeper.для.хранения.метаданных.о.брокерах,.темах.и.раз- делах..Запись.в.ZooKeeper.выполняют.только.при.изменении.списков.участников. групп.потребителей.или.изменениях.в.самом.кластере.Kafka..Объем.трафика.при. этом.минимален,.так.что.использование.выделенного.ансамбля.ZooKeeper.для.од- ного.кластера.Kafka.не.обоснованно..На.самом.деле.один.ансамбль.ZooKeeper.часто. применяется.для.нескольких.кластеров.Kafka.(с.задействованием.нового.корневого. пути.ZooKeeper.для.каждого.кластера,.как.описывалось.ранее.в.данной.главе). Потребители Kafka и ZooKeeper До Apache Kafka 0.9.0.0 потребители использовали не только брокеры, но и ZooKeeper для непосредственного сохранения информации о составе групп потребителей и соответствующих темах, а также для периодической фиксации смещений для каждого из обрабатываемых разделов (для обеспечения возможно- сти восстановления после сбоев между потребителями в группе). В версии 0.9.0.0 появился новый интерфейс потребителей, благодаря которому стало возможно делать это непосредственно с помощью брокеров Kafka. Он описан в главе 4. 64 Глава 2 • Установка Kafka Однако.при.работе.потребителей.и.ZooKeeper.с.определенными.настройками.есть. нюанс..Для.фиксации.смещений.потребители.могут.использовать.или.ZooKeeper,. или.Kafka,.причем.интервал.между.фиксациями.можно.настраивать..Если.потреби- тели.применяют.ZooKeeper.для.смещений,.то.каждый.потребитель.будет.произво- дить.операцию.записи.ZooKeeper.через.заданное.время.для.каждого.потребляемого. им.раздела..Обычный.промежуток.времени.для.фиксации.смещений.—.1.минута,. так.как.именно.через.такое.время.группа.потребителей.читает.дублирующие.сооб- щения.в.случае.сбоя.потребителя..Эти.фиксации.могут.составлять.существенную. долю.трафика.ZooKeeper,.особенно.в.кластере.с.множеством.потребителей,.так.что. их.следует.учитывать..Если.ансамбль.ZooKeeper.не.способен.обрабатывать.такой. объем.трафика,.может.понадобиться.увеличить.интервал.фиксации..Однако.реко- мендуется,.чтобы.работающие.с.актуальными.библиотеками.Kafka.потребители. использовали.Kafka.для.фиксации.смещений.и.не.зависели.от.ZooKeeper. Не.считая.использования.одного.ансамбля.для.нескольких.кластеров.Kafka,. не.рекомендуется.делить.ансамбль.с.другими.приложениями,.если.этого.можно. избежать..Kafka.весьма.чувствительна.к.длительности.задержки.и.времени.ожи- дания.ZooKeeper,.и.нарушение.связи.с.ансамблем.может.вызвать.непредсказуемое. поведение.брокеров..Вследствие.этого.несколько.брокеров.вполне.могут.одно- временно.отключиться.в.случае.потери.подключений.к.ZooKeeper,.что.приведет. к.отключению.разделов..Это.также.создаст.дополнительную.нагрузку.на.диспетчер. кластера,.что.может.вызвать.возникновение.неочевидных.ошибок.через.длительное. время.после.нарушения.связи,.например,.при.попытке.контролируемого.останова. брокера..Следует.выносить.другие.приложения,.создающие.нагрузку.на.диспетчер. кластера.в.результате.активного.использования.или.неправильного.функциониро- вания,.в.отдельные.ансамбли. Резюме В.этой.главе.мы.поговорили.о.том,.как.установить.и.запустить.Apache.Kafka..Рас- смотрели,.как.выбрать.подходящее.аппаратное.обеспечение.для.брокеров,.и.разо- брались.в.специфических.вопросах.настроек.для.промышленной.эксплуатации.. Теперь,.имея.кластер.Kafka,.мы.можем.пройтись.по.основным.вопросам.клиентских. приложений.Kafka..Следующие.две.главы.будут.посвящены.созданию.клиентов. как.для.генерации.сообщений.для.Kafka.(глава.3),.так.и.для.их.дальнейшего.по- требления.(глава.4). 3 Производители Kafka: запись сообщений в Kafka Используется.ли.Kafka.в.качестве.очереди,.шины.передачи.сообщений.или.плат- формы.хранения.данных,.в.любом.случае.всегда.создаются.производитель,.записы- вающий.данные.в.Kafka,.потребитель,.читающий.данные.из.нее,.или.приложение,. выполняющее.и.то.и.другое. Например,.в.системе.обработки.транзакций.для.кредитных.карт.всегда.будет.кли- ентское.приложение,.например,.интернет-магазин,.отвечающее.за.немедленную. отправку.каждой.из.транзакций.в.Kafka.сразу.же.после.выполнения.платежа.. Еще.одно.приложение.будет.отвечать.за.немедленную.проверку.этой.транзакции. с.помощью.процессора.правил.и.выяснение.того,.одобрена.она.или.отклонена.. Затем.ответ.«одобрить/отклонить».можно.будет.записать.в.Kafka.и.передать. в.интернет-магазин,.инициировавший.транзакцию..Третье.приложение.будет.вы- полнять.чтение.как.транзакции,.так.и.информации.о.том,.одобрена.ли.она,.из.Kafka. и.сохранять.их.в.базе.данных,.чтобы.аналитик.мог.позднее.просмотреть.принятые. решения.и,.возможно,.усовершенствовать.процессор.правил. Apache.Kafka.поставляется.со.встроенным.клиентским.API,.которым.разработчики. могут.воспользоваться.при.создании.взаимодействующих.с.Kafka.приложений. В.этой.главе.мы.научимся.использовать.производители.Kafka,.начав.с.обзора.их. архитектуры.и.компонентов..Мы.покажем,.как.создавать.объекты. KafkaProducer и. ProducerRecord ,.отправлять.записи.в.Kafka.и.обрабатывать.возвращаемые.ею.со- общения.об.ошибках..Далее.приведем.обзор.наиболее.важных.настроек,.служащих. для.управления.поведением.производителя..Завершим.главу.более.детальным. обзором.использования.различных.методов.секционирования.и.сериализато- ров,.а.также.обсудим.написание.ваших.собственных.сериализаторов.и.объектов. Partitioner В.главе.4.мы.займемся.клиентом-потребителем.Kafka.и.чтением.данных.из.Kafka. 66 Глава 3 • Производители Kafka: запись сообщений в Kafka Сторонние клиенты Помимо встроенных клиентов в Kafka имеется двоичный протокол передачи дан- ных. Это значит, что приложения могут читать сообщения из Kafka или записывать сообщения в нее простой отправкой соответствующих последовательностей бай- тов на сетевой порт Kafka. Существует множество клиентов, реализующих про- токол передачи данных Kafka на различных языках программирования, благодаря чему можно легко использовать ее не только в Java-приложениях, но и в таких языках программирования, как C++, Python, Go и многих других. Эти клиенты не включены в проект Apache Kafka, но в «Википедии» в статье о проекте при- водится список клиентов для отличных от Java языков. Рассмотрение протокола передачи данных и внешних клиентов выходит за рамки текущей главы. Обзор производителя Существует.множество.причин,.по.которым.приложению.может.понадобиться. записывать.сообщения.в.Kafka:.фиксация.действий.пользователей.для.аудита.или. анализа,.запись.показателей,.сохранение.журнальных.сообщений,.запись.поступа- ющей.от.интеллектуальных.устройств.информации,.асинхронное.взаимодействие. с.другими.приложениями,.буферизация.информации.перед.записью.ее.в.базу. данных.и.многое.другое. Эти.разнообразные.сценарии.использования.означают.также.разнообразие.тре- бований:.каждое.ли.сообщение.критично.важно.или.потеря.части.сообщений. допустима?.Допустимо.ли.случайное.дублирование.сообщений?.Нужно.ли.при- держиваться.каких-либо.жестких.требований.относительно.длительности.задержки. или.пропускной.способности? В.рассмотренном.ранее.примере.обработки.транзакций.для.кредитных.карт.кри- тично.важно.было.не.терять.ни.одного.сообщения.и.не.допускать.их.дублирования.. Длительность.задержки.должна.быть.низкой,.но.допустимы.задержки.до.500.мс,. а.пропускная.способность.должна.быть.очень.высокой.—.предполагается.обраба- тывать.миллионы.сообщений.в.секунду. Совсем.другим.сценарием.использования.было.бы.хранение.информации.о.щелч- ках.кнопкой.мыши.на.сайте..В.этом.случае.допустима.потеря.части.сообщений. или.небольшое.количество.повторяющихся.сообщений..Длительность.задержки. может.быть.высокой,.так.как.она.никак.не.влияет.на.удобство.работы.пользователя.. Другими.словами,.ничего.страшного,.если.сообщение.поступит.в.Kafka.только.через. несколько.секунд,.главное,.чтобы.следующая.страница.загрузилась.сразу.же.после. щелчка.пользователя.по.ссылке..Пропускная.способность.зависит.от.ожидаемого. уровня.пользовательской.активности.на.сайте. Различие.в.требованиях.влияет.на.использование.API.производителей.для.записи. сообщений.в.Kafka.и.на.используемые.настройки. |