Указатель основ системы обмена сообщениями Kafka

Kafka опрос
Указатель основ системы обмена сообщениями Kafka

мы в«Тест на 360 градусов: потеряет ли KAFKA данные? Соответствует ли его высокая доступность спросу? 》В этой статье подробно рассказывается, подходит ли KAFKA для использования в бизнес-системах. Но некоторые друзья до сих пор не знают, что такое KAFKA и почему она существует. Это недостаток в работе и на собеседованиях, потому что KAFKA, похоже, стала необходимым навыком для инженеров с тех пор, как я не знаю, когда.

Модификация некоторых идей

Начиная с версии 0.9, слоган Kafka изменился с «высокопроизводительная распределенная система обмена сообщениями» на «Распределенная стриминговая платформа".

Кафка - это не просто очередь,и хранилище, имеет супер возможность штабелирования.

Kafka используется не только в высокопроизводительных сценариях больших данных,Его также можно использовать в бизнес-системах с требованиями к транзакциям., но с меньшей производительностью.

Кафка не чем больше тем лучше, из-за своего принципа построения,После того, как число достигает порога, его производительность обратно пропорциональна количеству тем.

Введение очереди сообщений эквивалентно введению асинхронности., независимо от того, какова ваша цель. Это часто означает изменения в бизнес-процессах или даже изменения в работе с продуктом.

Что такое система сообщений

Типичная сцена

На рисунке выше представлена ​​типичная архитектура некоторых небольших систем. Учитывая бизнес-сценарий заказа, в нашу бизнес-систему поступает большое количество запросов, и если мы напрямую войдем в бизнес-таблицу через сложную бизнес-логику, будет большое количество сбоев тайм-аута запроса. Поэтому мы добавили промежуточную буферную таблицу (или Redis) для приема запросов пользователей. Затем существует задача с синхронизацией, которая непрерывно получает данные из буферной таблицы для обработки реальной бизнес-логики.

У этой конструкции есть несколько проблем:

  • Интервал опроса запланированной задачи контролировать непросто. Бизнес-обработка подвержена задержкам.

  • Мощность обработки нельзя масштабировать горизонтально, и возникнут такие проблемы, как распределенные блокировки и последовательные гарантии.

  • Когда другим предприятиям также нужны эти данные заказа, в запланированное задание необходимо добавить бизнес-логику.

Когда трафик увеличивается и бизнес-логика усложняется, очередь сообщений готова к появлению.

Запрос будет временно сохранен в очереди сообщений, а затем обработан в режиме реального времени методом push (или pull). В этом сценарии очередь сообщений выступает в качестве компонента снижения пиковой нагрузки и резервирования.

Роль системы сообщений

отсечение пикаОн используется для выполнения запросов, которые превышают возможности обработки бизнес-системы, чтобы обеспечить бесперебойную работу бизнеса. Это может сэкономить много денег, например, некоторые кампании seckill, не рассчитанные на пиковую производительность.

буферОн существует как буферный уровень на уровне службы и медленном посадочном уровне, и его функция аналогична сглаживанию пиков, но в основном он используется для потока данных внутри службы. Например, массовая рассылка SMS.

разъединениеПроект Инь Ши, и не может определить конкретные потребности. Очередь сообщений можно использовать в качестве уровня интерфейса для разделения важных бизнес-процессов. Вам нужно только соблюдать соглашения и программировать данные, чтобы получить масштабируемость.

избыточностьДанные сообщения могут быть использованы во многих отношениях для использования множества не связанного бизнеса.

прочностьОчередь сообщений может накапливать запросы, поэтому даже если бизнес-потребитель умрет на короткое время, это не повлияет на нормальную работу основного бизнеса.

Требования к системе обмена сообщениями

Поскольку система сообщений так важна, помимо обеспечения высокой доступности, к ней также предъявляются высокие требования к собственным характеристикам. Как правило, это следующие моменты:

более высокая производительностьВключая доставку сообщений и потребление сообщений, оба они выполняются быстро. Как правило, возможность параллельной обработки достигается за счет увеличения количества осколков.

достоверные новостиВ некоторых сценариях сообщения не могут быть потеряны. Сторона производства, потребления и MQ не может терять сообщения. Как правило, это решается увеличением копии и форсированием диска.

Лучшая масштабируемостьМожет сопровождать вас, чтобы сделать проект больше и сопровождать вас на край света. После добавления узлов кластер растет без снижения производительности.

экологическая зрелостьМониторинг, эксплуатация и обслуживание, многоязычная поддержка, активное сообщество.

Объяснение терминов KAFKA

основные навыки

Kafka — это распределенная система обмена сообщениями (хранилища).Распределенные системы увеличивают параллелизм за счет сегментирования, повышают надежность за счет реплик., Кафка не исключение. Давайте взглянем на его структуру и, кстати, объясним терминологию.

Вы устанавливаете Kafka на машину, затем машина называетсяBroker, кластер KAFKA содержит один или несколько таких экземпляров.

Компонент, отвечающий за запись данных в KAFKA, называетсяProducer, производитель сообщения обычно записывается в бизнес-системе.

В KAFKA может отправляться много видов сообщений, как отличить их классификацию? то естьTopicКонцепция чего-либо. После распространения темы она может существовать у нескольких брокеров.

Разделите тему на несколько сегментов, и после увеличения параллелизма каждый сегмент называетсяPartition, разделы обычно равномерно распределены по всем машинам.

Приложения, потребляющие данные в Kafka, называютсяConsumer, мы даем имя потребительскому бизнесу определенной тематики, поэтому название называетсяConsumer Group

расширения

ConnectorКоннектор Task, который включает в себя два интерфейса, Source и Sink, предоставляет пользователям возможность настраивать поток данных. Например, импортируйте данные из JDBC в Kafka или напрямую передайте данные Kafka в БД.

StreamПодобно Spark Stream, он может выполнять потоковую обработку данных. Но у него нет самого кластера, просто абстракция над кластером KAFKA. Если вам нужна потоковая обработка в реальном времени и вам не нужна экосистема Hadoop, то это для вас.

Topic

Наше сообщение написано в теме. При наличии нескольких тем сообщения могут быть классифицированы и изолированы. Например, информация для входа записывается в user_activity_topic, а сообщения журнала записываются в log_topic.

Каждая тема может настроить количество разделов. Допустим в нашем кластере три Брокера, тогда при количестве партиций 1 сообщение будет записано только на одну из нод, когда наша партиция 3, сообщение будет записано на три ноды по хэшу, когда наша партиция равно 6, то каждый узел будет иметь 2 информации о разделе. Добавление разделов может увеличить параллелизм, но лучше не больше. В общем, 6-12 лучше всего, и лучше всего делить на количество узлов, чтобы избежать перекоса данных.

Каждый раздел состоит из последовательности упорядоченных неизменяемых сообщений, которые добавляются последовательно. Каждое сообщение в разделе имеет последовательный порядковый номер, называемый смещением. Kafka будет хранить все сообщения в течение настроенного времени, так что это также временное хранилище. В течение этого времени все сообщения могут быть использованы, а также могут быть повторены и использованы несколько раз путем изменения значения смещения.

Смещение потребителем в общем управлении, конечно, вы также можете быть установлены в соответствии с требуемыми программой. Смещение только после совершения, изменится, иначе вы всегда получите дублирующие данные. Новая кафка положила эти смещения конкретной темы:__consumer_offsets, что является фиолетовой областью на изображении выше.

Стоит отметить, что количество потребителей не должно превышать количество разделов. В противном случае дополнительные потребители не получат никаких данных.

ISR

Распространенным методом для распределенных систем обеспечения надежности данных является увеличение количества реплик, и ISR основан на этом методе.

Полное название ISR — «In-Sync Replicas», что является важным механизмом обеспечения высокой доступности и согласованности. Количество реплик оказывает определенное влияние на пропускную способность Kafka, но значительно повышает доступность. Обычно 2-3 подходит.

Реплики имеют два элемента, один должен иметь достаточное количество номеров, а другой не попадать на один и тот же инстанс. ISR предназначены для разделов, и у каждого раздела есть список синхронизации. Среди N реплик одна реплика является ведущей, а остальные — последователями.Лидер обрабатывает все запросы на чтение и запись для раздела., остальное резервные копии. При этом ведомый будет пассивно и периодически реплицировать данные на ведущего.

Если цветок сильно отстает от лидера или не инициирует запрос на репликацию данных в течение определенного периода времени, лидер удалит его из ISR.

Лидер фиксирует только тогда, когда все реплики в ISR отправляют ACK лидеру.

Управление ISR Kafka в конечном итоге будет возвращено узлу Zookeeper. Конкретное расположение: /brokers/topics/[topic]/partitions/[partition]/state. Когда ведущий узел выходит из строя, он также будет полагаться на Zk для проведения новых выборов лидера. После того, как Offset был перенесен в Topic внутри Kafka, зависимость KAFKA от ZK становилась все меньше и меньше.

надежность

семантика доставки сообщений

At least onceСообщения могут теряться, но не повторяться

At most onceСообщение не теряется, но может повторяться, поэтому потребитель должен быть идемпотентным.

Exactly onceСообщение не потеряется и гарантированно будет доставлено только один раз

Общая семантика доставки сообщений должна быть гарантирована как стороной производителя, так и стороной потребителя. КАФКА по умолчаниюAt most once, что также может быть достигнуто путем настройки транзакцийExactly once, но это очень неэффективно и не рекомендуется.

ACK

Когда производитель отправляет данные лидеру, они могут пройтиrequest.required.acksпараметр для установки уровня достоверности данных:

1 (по умолчанию)После отправки данных в Kafka подтверждается, что сообщение успешно получено лидером, даже если оно успешно отправлено. В этом случае, если лидер выйдет из строя, данные будут потеряны.

0Производитель просто отправляет данные и не ждет возврата. В этом случае эффективность передачи данных самая высокая, но достоверность данных действительно самая низкая.

-1Производитель должен дождаться, пока все последователи в ISR подтвердят, что данные были получены, прежде чем передача будет завершена, и надежность является самой высокой.

Почему КАФКА быстрая

CacheКэш файловой системы Кэш PageCache

писать последовательноПоскольку современные операционные системы поддерживают методы упреждающего чтения и записи, последовательная запись на диск в большинстве случаев выполняется быстрее, чем случайная запись в память.

Zero-copyНулевое копирование, на одну подкачку памяти меньше.

Batching of MessagesПакетная обработка. Консолидируйте небольшие запросы, а затем взаимодействуйте в потоковом режиме, достигая ограничения сети.

Режим вытягиванияИспользуйте режим извлечения для получения и использования сообщений, который соответствует возможностям обработки потребителя.

сцены, которые будут использоваться

  • Доставлять деловые сообщения

  • Журнал действий пользователя • Элементы мониторинга и т. д.

  • журнал

  • Потоковая обработка, например, определенные агрегации

  • Журнал фиксации, как избыточность для некоторых важных предприятий

Ниже приведен типичный пример использования ведения журнала.

стресс тест

KAFKA поставляется со следующим инструментом для измерения давления.

./kafka-producer-perf-test.sh --topic test001 --num- records 1000000 --record-size 1024 --throughput -1 --producer.config ../config/producer.properties

Управление конфигурацией

точка фокусировки

Сценарий приложенияРазличные сценарии приложений имеют разные стратегии настройки и разные уровни обслуживания SLA. Вам нужно выяснить, допускается ли потеря или повторение вашего сообщения, а затем установить соответствующее количество копий и режим ACK.

LagВсегда обращайте внимание на отставание сообщений. Слишком большое отставание означает, что есть проблема с вычислительной мощностью. Если у вас есть отставание по сообщениям в малое время пик, то при поступлении большого количества трафика неизбежно возникнут проблемы.

РасширениеПосле расширения будет задействовано перераспределение разделов, и пропускная способность вашей сети может стать узким местом.

Диск полонРекомендуется установить срок действия или настроить максимальное использование диска.

log.retention.bytes

Истек срок удаленияМесто на диске ограничено, рекомендуется сохранять последние записи, а остальные автоматически удаляются.

log.retention.hours	
log.retention.minutes	
log.retention.ms	

Инструменты управления мониторингом

KafkaManagerСозданный Yahoo, он может управлять несколькими кластерами Kafka и в настоящее время является наиболее полным инструментом управления. Но обратите внимание, что когда у вас слишком много тем, данные мониторинга будут занимать большую часть вашей пропускной способности, что приведет к увеличению нагрузки на ваш компьютер. Его функция мониторинга слаба и не отвечает потребностям.

KafkaOffsetMonitorПрограмма запускается в виде jar-пакета, который удобнее развертывать. Безопаснее использовать только функцию мониторинга.

Kafka Web ConsoleФункция мониторинга относительно обширна. Она может предварительно просматривать сообщения и отслеживать смещение, задержку и другую информацию. Не рекомендуется использовать ее в производственной среде.

BurrowЭто платформа для мониторинга отставания потребителей, открытый исходный код LinkedIn. Поддержка будильника, только интерфейс HTTP, без webui.

Availability Monitor for KafkaПлатформа мониторинга доступности и задержки Kafka с открытым исходным кодом от Microsoft предоставляет интерфейс JMX, который редко используется.

Rebalance

Потребительский баланс

Онлайн и автономный режим потребительского конца вызовет перераспределение отношений между разделами и потребителями, что приведет к перебалансировке. Тайм-аут и джиттер могут возникать в бизнесе.

сервер переназначить

Расширение и сжатие сервера, а также запуск и остановка узла приведут к искажению данных, и раздел необходимо будет переназначить. Этот процесс можно запустить вручную в фоновом режиме менеджера kafka, чтобы сделать распределение разделов более равномерным.

Этот процесс приведет к большому количеству копий данных между кластерами. Если в вашем кластере большой объем данных, этот процесс будет длиться несколько часов или дней. Будьте осторожны.

Linkedin открыл исходный код своего автоматизированного инструмента управления круиз-контролем, если у вас есть потребность в автоматизированной эксплуатации и обслуживании, вы можете взглянуть на него.

конец

Эта статья представляет собой самые базовые знания, связанные с KAFKA, и в основном охватывает большинство простых вопросов интервью.

чтобы достичьExactly onceЭта семантика, KAFKA приложила много усилий, результат усилий почти недоступен, а пропускная способность слишком низкая. Если вы действительно хотите говорить о «высокой надежности», лучше сделать «стратегию компенсации». Если производительность плохая, конечным результатом может быть полная недоступность, а потеря данных — это только часть небольших данных в крайних случаях. Как бы вы это взвесили?

КАФКА при большом трафике очень пугает, да и данные часто заливают сетевуху. После сбоя брокера, если на одном узле есть данные о T, его запуск займет полчаса, и он также будет действовать как ведомый, чтобы догнать данные других главных разделов. Так что не делайте свой кластер KAFKA слишком большим, отработка отказа будет катастрофой. После запуска, если выполняется переназначение, это будет еще один бросок.