Как работает Apache Kafka
Apache Kafka появилась как решение проблемы. Инженеры LinkedIn столкнулись с трудностями при отслеживании метрик веб-сайта, потоков активности и других операционных данных.
Команда инженеров под руководством Джея Крепса (Jay Kreps), Нехи Наркхеде (Neha Narkhede) и Джун Рао (Jun Rao) начала разработку распределённой системы обмена сообщениями по принципу «публикация-подписка», способной обрабатывать потоки данных с высокой пропускной способностью и низкой задержкой.
Эта система в итоге стала Apache Kafka.
Проект был открыт для общественности в начале 2011 года. Название «Kafka» выбрал Джей Крепс. Он назвал систему в честь известного писателя Франца Кафки. 😊
Крепс был поклонником творчества Франца Кафки и посчитал это имя подходящим для системы, работающей с потоками информации.
Система написана на Java и Scala.
Позже они основали компанию Confluent в 2014 году для предоставления коммерческой поддержки и дополнительных инструментов пользователям Kafka.
📌 Давайте разберём базовый принцип работы.
[1] Отправитель отправляет сообщение
* Приложение выступает в роли отправителя, создавая сообщение с данными (полезной нагрузкой) и необязательным ключом.
* Отправитель подключается к брокеру в кластере Kafka и определяет целевую тему.
* Kafka использует партиционер для определения того, в какую партицию темы должно быть доставлено сообщение. Это обеспечивает балансировку нагрузки и параллельную обработку.
* Сообщение доставляется в ведущую реплику выбранной партиции.
[2] Хранение сообщений и репликация
* Ведущая реплика добавляет сообщение в сегмент журнала.
* Сообщение получает уникальный идентификатор (смещение), который определяет его позицию в журнале.
* Ведущая реплика копирует сообщение в последующие реплики для обеспечения отказоустойчивости.
[3] Приёмщик получает сообщения
* Приложение выступает в роли приёмщика, присоединяясь к группе приёмщиков.
* Приёмщики в одной группе совместно используют смещения и координируют потребление.
* Каждый приёмщик получает сообщения из назначенных ему партиций на основе зафиксированного смещения.
* Приёмщик получает пакеты сообщений и обрабатывает их.
[4] Подтверждение потребления
* После завершения обработки приёмщик фиксирует новое смещение.
* Это сообщает Kafka, какие сообщения были успешно потреблены.
* Kafka отслеживает зафиксированные смещения для каждого приёмщика в группе.
[*] Процесс продолжается
* Отправители продолжают отправлять сообщения, а приёмщики продолжают получать и обрабатывать их на основе последних смещений.
* Этот цикл обеспечивает упорядоченную доставку и надёжное потребление даже при сбоях или перезапусках.
Замечания:
👉 Поток сообщений является асинхронным. Отправители не ждут, пока приёмщики обработают сообщения.
👉 Приёмщики могут отставать от отправителей, если обработка идёт медленно.
👉 Kafka предлагает механизмы для обработки сбоев и обеспечения доставки сообщений как минимум один раз или ровно один раз.
Post #2512
1.76K
- ❤ 8
- 👍 6
- 👏 4
- ❤🔥 1