Апач Кафка
Для определения высокого уровня давайте представим краткое определение Apache Kafka:
Apache Kafka - это распределенный, отказоустойчивый, горизонтально масштабируемый журнал фиксации.
Это были высокоуровневые слова об Apache Kafka. Давайте разберемся с концепциями подробно здесь.
- Распространено: Kafka разделяет данные, которые он содержит, на несколько серверов, и каждый из этих серверов может обрабатывать запросы от клиентов на долю данных, которые он содержит
- Отказоустойчивой: У Кафки нет единой точки отказа. В системе SPoF, такой как база данных MySQL, если сервер, на котором размещена база данных, выходит из строя, приложение завинчивается. В системе, не имеющей SPoF и состоящей из нескольких узлов, даже если большая часть системы выходит из строя, для конечного пользователя все равно.
- Горизонтально масштабируемый: Этот вид проверки относится к добавлению дополнительных машин в существующий кластер. Это означает, что Apache Kafka может принимать больше узлов в своем кластере и не предоставлять время простоя для необходимых обновлений системы. Взгляните на изображение ниже, чтобы понять тип концепции scailing:
- Журнал фиксации: Журнал фиксации - это структура данных, такая же, как и связанный список. Он добавляет все приходящие к нему сообщения и всегда поддерживает их порядок. Данные не могут быть удалены из этого журнала, пока не будет достигнуто указанное время для этих данных.
Вертикальный и горизонтальный ход
Тема в Apache Kafka похожа на очередь, в которой хранятся сообщения. Эти сообщения хранятся в течение настраиваемого количества времени, и сообщение не удаляется, пока не будет достигнуто это время, даже если оно было использовано всеми известными потребителями.
Kafka является масштабируемым, поскольку именно потребители фактически хранят то, какое сообщение было получено ими последним, в качестве значения «смещения». Давайте посмотрим на рисунок, чтобы лучше понять это:
Разделение тем и потребительское смещение в Apache Kafka
Начало работы с Apache Kafka
Чтобы начать использовать Apache Kafka, он должен быть установлен на машине. Для этого прочтите «Установка Apache Kafka на Ubuntu».
Убедитесь, что у вас активная установка Kafka, если вы хотите попробовать примеры, которые мы представим позже в уроке.
Как это работает?
С Кафкой Режиссер приложения публикуют Сообщения который прибывает в Кафку Узел а не напрямую потребителю. С этого узла Kafka сообщения потребляются Потребитель Приложения.
Kafka Производитель и Потребитель
Поскольку одна тема может получить много данных за один раз, чтобы сохранить горизонтальную масштабируемость Kafka, каждая тема разделена на перегородки и каждый раздел может находиться на любом узле кластера. Попробуем это представить:
Разделы тем
Опять же, Kafka Broker не ведет учет того, какой потребитель использовал, сколько пакетов данных. Это ответственность потребителей за отслеживание данных, которые он потребил.
Сохранение на диске
Kafka сохраняет записи сообщений, которые он получает от производителей, на диске и не хранит их в памяти. Может возникнуть вопрос, как это сделать возможным и быстрым? Это было обусловлено несколькими причинами, которые делают его оптимальным способом управления записями сообщений:
- Kafka следует протоколу группировки записей сообщений. Производители создают сообщения, которые сохраняются на диске большими порциями, а потребители также потребляют эти записи сообщений большими линейными порциями.
- Причина, по которой запись на диск является линейной, заключается в том, что это ускоряет чтение из-за значительного уменьшения времени линейного чтения с диска.
- Линейные дисковые операции оптимизированы Операционные системы а также с помощью техники написание а также чтение вперед.
- Современные ОС также используют концепцию Кэширование страниц что означает, что они кэшируют некоторые данные на диске в свободной доступной оперативной памяти.
- Поскольку Kafka сохраняет данные в единых стандартных данных во всем потоке от производителя до потребителя, он использует оптимизация без копирования процесс.
Распространение и репликация данных
Как мы выяснили выше, тема разделена на разделы, каждая запись сообщения реплицируется на несколько узлов кластера, чтобы поддерживать порядок и данные каждой записи в случае, если один из узлов умирает.
Несмотря на то, что раздел реплицируется на несколько узлов, все же существует лидер раздела узел, через который приложения читают и записывают данные по теме, а лидер реплицирует данные на другие узлы, которые называются подписчики этого раздела.
Если данные записи сообщения очень важны для приложения, гарантия безопасности записи сообщения на одном из узлов может быть увеличена путем увеличения фактор репликации кластера.
Что такое Zookeeper?
Zookeeper - это распределенное хранилище ключей с высокой степенью отказоустойчивости. Apache Kafka в значительной степени зависит от Zookeeper для хранения механизмов кластера, таких как сердцебиение, распространение обновлений / конфигураций и т. Д.).
Это позволяет брокерам Kafka подписаться на себя и знать, когда произошли какие-либо изменения, касающиеся лидера раздела и распределения узлов.
Приложения производителя и потребителя напрямую взаимодействуют с Zookeeper приложение, чтобы узнать, какой узел является лидером раздела для темы, чтобы они могли выполнять чтение и запись от лидера раздела.
Потоковая передача
Потоковый процессор - это основной компонент в кластере Kafka, который принимает непрерывный поток данных записи сообщений из входных тем, обрабатывает эти данные и создает поток данных для выходных тем, которые могут быть любыми, от мусора до базы данных.
Вполне возможно выполнять простую обработку напрямую с использованием API производителя / потребителя, хотя для сложной обработки, такой как объединение потоков, Kafka предоставляет интегрированную библиотеку Streams API, но обратите внимание, что этот API предназначен для использования в нашей собственной кодовой базе, и это не так. я работаю на брокера. Он работает аналогично пользовательскому API и помогает нам масштабировать обработку потоковой информации по нескольким приложениям.
Когда использовать Apache Kafka?
Как мы изучали в предыдущих разделах, Apache Kafka можно использовать для работы с большим количеством записей сообщений, которые могут принадлежать практически бесконечному количеству тем в наших системах.
Apache Kafka - идеальный кандидат, когда дело доходит до использования службы, которая может позволить нам следовать архитектуре, управляемой событиями, в наших приложениях. Это связано с его возможностями сохранения данных, отказоустойчивой и высоко распределенной архитектуры, в которой критически важные приложения могут полагаться на его производительность.
Масштабируемая и распределенная архитектура Kafka делает интеграцию с микросервисами очень простой и позволяет приложению отделить себя от большого количества бизнес-логики.
Создание новой темы
Мы можем создать тестовую тему тестирование на сервере Apache Kafka с помощью следующей команды:
Создание темы
sudo kafka-themes.sh --create --zookeeper localhost: 2181 - коэффициент репликации 1--разделы 1 - тематическое тестирование
Вот что мы получаем с помощью этой команды:
Создать новую тему Kafka
Будет создана тема тестирования, которую мы сможем подтвердить с помощью указанной команды:
Подтверждение создания темы Kafka
Написание сообщений по теме
Как мы изучили ранее, одним из API, присутствующих в Apache Kafka, является API производителя. Мы будем использовать этот API для создания нового сообщения и публикации в только что созданной теме:
Написание сообщения в теме
Судо Кафка-консоль-производитель.sh --broker-list localhost: 9092 --topic testingПосмотрим, что выводит эта команда:
Опубликовать сообщение в теме Kafka
После того, как мы нажмем клавишу, мы увидим новый знак стрелки (>), который означает, что теперь мы можем вводить данные:
Ввод сообщения
Просто введите что-нибудь и нажмите, чтобы начать новую строку. Я набрал 3 строки текста:
Чтение сообщений из темы
Теперь, когда мы опубликовали сообщение в созданной нами теме Kafka, это сообщение будет там в течение некоторого настраиваемого времени. Мы можем прочитать это сейчас, используя Потребительский API:
Чтение сообщений из темы
Судо кафка-консоль-потребитель.sh --zookeeper localhost: 2181 --тематическое тестирование - с самого начала
Вот что мы получаем с помощью этой команды:
Команда для чтения сообщения из темы Kafka
Мы сможем увидеть сообщения или строки, которые мы написали, используя API-интерфейс Producer, как показано ниже:
Если мы напишем еще одно новое сообщение с помощью Producer API, оно также будет мгновенно отображаться на стороне потребителя:
Публикация и потребление одновременно
Заключение
В этом уроке мы рассмотрели, как мы начинаем использовать Apache Kafka, который является отличным брокером сообщений и может также выступать в качестве специальной единицы сохранения данных.