В этом уроке мы увидим, что такое Apache Kafka и как он работает, а также некоторые наиболее распространенные варианты использования. Apache Kafka изначально был разработан в LinkedIn в 2010 году, а в 2012 году он стал проектом Apache верхнего уровня. Он состоит из трех основных компонентов:
- Издатель-подписчик: Этот компонент отвечает за управление и эффективную доставку данных через узлы Kafka и потребительские приложения, которые сильно масштабируются (например, буквально).
- Подключить API: Connect API - самая полезная функция для Kafka, позволяющая интегрировать Kafka со многими внешними источниками и приемниками данных.
- Кафка Ручьи: Используя Kafka Streams, мы можем рассмотреть возможность масштабной обработки входящих данных практически в реальном времени.
Мы изучим намного больше концепций Kafka в следующих разделах. Давай двигаться вперед.
Концепции Apache Kafka
Прежде чем копать глубже, нам нужно тщательно изучить некоторые концепции Apache Kafka. Вот термины, которые мы должны знать очень кратко:
-
- Режиссер: Это приложение, которое отправляет сообщение Kafka
- Потребитель: Это приложение, которое потребляет данные из Kafka
- Сообщение: Данные, которые отправляются приложением-производителем в приложение-получатель через Kafka
- Связь: Kafka устанавливает TCP-соединение между кластером Kafka и приложениями
- Тема: Тема - это категория, для которой отправленные данные помечаются и доставляются заинтересованным потребительским приложениям
- Раздел по теме: Поскольку одна тема может получить много данных за один раз, чтобы сохранить горизонтальную масштабируемость Kafka, каждая тема разделена на разделы, и каждый раздел может находиться на любом узле машины кластера. Попробуем это представить:
Разделы тем
- Реплики: Как мы выяснили выше, тема разделена на разделы, каждая запись сообщения реплицируется на несколько узлов кластера, чтобы поддерживать порядок и данные каждой записи в случае, если один из узлов умирает.
- Потребительские группы: Несколько потребителей, интересующихся одной и той же темой, могут быть сохранены в группе, которая называется группой потребителей
- Компенсировать: Kafka является масштабируемым, поскольку именно потребители фактически сохраняют, какое сообщение было получено ими последним в качестве значения «смещения». Это означает, что для той же темы смещение потребителя A может иметь значение 5, что означает, что ему нужно обработать шестой пакет следующим, а для потребителя B значение смещения может быть 7, что означает, что ему нужно обработать восьмой пакет следующим. Это полностью устранило зависимость от самой темы для хранения этих метаданных, относящихся к каждому потребителю.
- Узел: Узел - это отдельный сервер в кластере Apache Kafka.
- Кластер: Кластер - это группа узлов i.е., группа серверов.
Концепция темы, разделов по темам и смещения также может быть прояснена с помощью иллюстративного рисунка:
Разделение тем и потребительское смещение в Apache Kafka
Apache Kafka как система обмена сообщениями "публикация-подписка"
С помощью Kafka приложения Producer публикуют сообщения, которые поступают на узел Kafka, а не напрямую к потребителю. С этого узла Kafka сообщения потребляются приложениями-потребителями.
Kafka Производитель и Потребитель
Поскольку одна тема может получить много данных за один раз, чтобы сохранить горизонтальную масштабируемость Kafka, каждая тема разделена на перегородки и каждый раздел может находиться на любом узле кластера.
Опять же, Kafka Broker не ведет учет того, какой потребитель использовал, сколько пакетов данных. Это ответственность потребителей за отслеживание данных, которые он потребил. По той причине, что Kafka не отслеживает подтверждения и сообщения каждого потребительского приложения, он может управлять гораздо большим количеством потребителей с незначительным влиянием на пропускную способность. В производстве многие приложения даже следуют шаблону пакетных потребителей, что означает, что потребитель потребляет все сообщения в очереди через равные промежутки времени.
Монтаж
Чтобы начать использовать Apache Kafka, он должен быть установлен на машине. Для этого прочтите «Установка Apache Kafka на Ubuntu».
Пример использования: отслеживание использования веб-сайта
Kafka - отличный инструмент, который можно использовать, когда нам нужно отслеживать активность на веб-сайте. Данные отслеживания включают, помимо прочего, просмотры страниц, поиски, загрузки или другие действия, которые пользователи могут предпринять. Когда пользователь находится на веб-сайте, пользователь может совершать любое количество действий при просмотре веб-сайта.
Например, когда новый пользователь регистрируется на веб-сайте, его активность может отслеживаться, в каком порядке новый пользователь исследует функции веб-сайта, если пользователь настраивает свой профиль по мере необходимости или предпочитает напрямую переходить к функциям веб-сайта. Веб-сайт. Каждый раз, когда пользователь нажимает кнопку, метаданные для этой кнопки собираются в пакете данных и отправляются в кластер Kafka, откуда служба аналитики для приложения может собирать эти данные и давать полезные сведения о связанных данных. Если мы посмотрим, как разделить задачи на шаги, то вот как будет выглядеть процесс:
- Пользователь регистрируется на сайте и входит в личный кабинет. Пользователь пытается сразу получить доступ к функции, взаимодействуя с кнопкой.
- Веб-приложение создает сообщение с этими метаданными для раздела темы «click».
- Сообщение добавляется в журнал фиксации, а смещение увеличивается
- Теперь потребитель может получить сообщение от Kafka Broker и показать использование веб-сайта в режиме реального времени и показать прошлые данные, если он сбрасывает свое смещение на возможное прошлое значение
Пример использования: очередь сообщений
Apache Kafka - отличный инструмент, который может заменить инструменты брокера сообщений, такие как RabbitMQ. Асинхронный обмен сообщениями помогает разделить приложения и создает хорошо масштабируемую систему.
Как и в случае с концепцией микросервисов, вместо создания одного большого приложения мы можем разделить приложение на несколько частей, и каждая часть имеет очень специфическую ответственность. Таким образом, различные части могут быть написаны на полностью независимых языках программирования! Kafka имеет встроенную систему разделения, репликации и отказоустойчивости, что делает его хорошей системой крупномасштабного брокера сообщений.
В последнее время Kafka также рассматривается как очень хорошее решение для сбора журналов, которое может управлять брокером сервера сбора файлов журналов и предоставлять эти файлы в центральную систему. С помощью Kafka можно сгенерировать любое событие, о котором должна знать любая другая часть вашего приложения.
Использование Kafka в LinkedIn
Интересно отметить, что Apache Kafka ранее рассматривался и использовался как способ, с помощью которого конвейеры данных могли быть согласованы и через который данные были загружены в Hadoop. Kafka отлично работал, когда присутствовало несколько источников данных и мест назначения, и предоставление отдельного процесса конвейера для каждой комбинации источника и назначения было невозможно. Архитектор LinkedIn Kafka Джей Крепс хорошо описывает эту знакомую проблему в своем блоге:
Мое собственное участие в этом началось примерно в 2008 году после того, как мы отправили наше хранилище ключей. Мой следующий проект состоял в том, чтобы попытаться запустить работающую настройку Hadoop и перенести туда некоторые из наших рекомендательных процессов. Имея небольшой опыт в этой области, мы, естественно, выделили несколько недель на получение и отправку данных, а остальное время - на реализацию необычных алгоритмов прогнозирования. Так началась долгая утомительная работа.
Apache Kafka и Flume
Если вы перейдете к сравнению этих двух на основе их функций, вы найдете много общих черт. Вот некоторые из них:
- Рекомендуется использовать Kafka, когда у вас несколько приложений, потребляющих данные, вместо Flume, который специально разработан для интеграции с Hadoop и может использоваться только для приема данных в HDFS и HBase. Flume оптимизирован для операций HDFS.
- С Kafka недостатком является необходимость кодирования приложений производителей и потребителей, тогда как в Flume он имеет множество встроенных источников и приемников. Это означает, что если существующие потребности соответствуют функциям Flume, рекомендуется использовать сам Flume, чтобы сэкономить время.
- Flume может потреблять данные в полете с помощью перехватчиков. Это может быть важно для маскировки и фильтрации данных, тогда как Kafka нужна внешняя система обработки потоков.
- Kafka может использовать Flume в качестве потребителя, когда нам нужно принимать данные в HDFS и HBase. Это означает, что Kafka и Flume действительно хорошо интегрируются.
- Kakfa и Flume могут гарантировать нулевую потерю данных при правильной конфигурации, чего также легко добиться. Тем не менее, отметим, что Flume не реплицирует события, а это означает, что если один из узлов Flume выйдет из строя, мы потеряем доступ к событиям до тех пор, пока диск не будет восстановлен
Заключение
В этом уроке мы рассмотрели множество концепций Apache Kafka. Прочтите больше постов на основе Kafka здесь.