В связи с активным переходом от локальной ИТ-инфраструктуры в облачные полностью управляемые сервисы многие ИТ-архитекторы и дата-инженеры задумываются о замене собственного кластера Apache Kafka ее Cloud-альтернативами. Читайте, что общего у Apache Kafka с AWS Kinesis, чем они отличаются и какую платформу выбрать для потоковой передачи событий.
Потоковая обработка событий с Apache Kafka
Apache Kafka и AWS Kinesis — это распределенные платформы потоковой передачи данных в реальном времени, используемые множеством компаний по всему миру для высокопроизводительных конвейеров обработки, интеграции и аналитики больших данных в реальном времени. Они имеют распределенные хранилища данных, оптимизированные для приема и обработки потоковых данных, которые непрерывно генерируются множеством разных источников и отправляются одновременно. Потоковая платформа должна обрабатывать все эти потоки данных последовательно и поэтапно, обеспечивая надежное хранение событий для последующего извлечения, а также выполняя операции обработки и маршрутизации потоков к различным пунктам назначения. Потоковая передача событий обеспечивает непрерывный поток и интерпретацию данных, гарантируя, что нужная информация будет в нужном месте в нужное время.
Это необходимо во множестве сценариев и доменов, например, обработка платежей и финансовых транзакций на фондовых биржах, в банках и страховых компаниях, мониторинг транспорта и грузов, непрерывный сбор и анализ данных датчиков с устройств Интернета вещей и другого технологического оборудования. Еще потоковая передача событий нужна для оперативного реагирования на взаимодействия с клиентами и обработку заказов в реальном времени в торговле, гостиничном и туристическом бизнесе, а также в медицине для наблюдения за больными и прогнозирования изменения их состояния с целью оказания своевременной неотложной помощи.
В мире потоковой обработки данных самой популярной платформой считается Apache Kafka, изначально созданная компанией LinkedIn и переданная Apache Software Foundation. Написанная на Scala и Java, Kafka предоставляет API для этих языков, позволяя приложениям-продюсерам отправлять потоки данных через API в топик. Топик— это журнал записей, разбитых на разделы, каждый из которых имеет неизменный порядок. Разделы располагаются на узлах кластера Kafka – брокерах. Приложения-потребители считывают сообщения из топика, на который они подписаны. Топики разделены на разделы для повышения производительности и масштабируемости. Kafka гарантирует, что все сообщения внутри раздела упорядочены в порядке их получения. За порядок обработки конкретного сообщения отвечает его смещение (offset), которое можно рассматривать как стандартный индекс массива. Cмещение представляет собой порядковый номер, который увеличивается для каждого нового сообщения в разделе.
В отличие от JMS-брокеров, что мы рассматривали здесь, Kafka реализует вытягивающую модель доставки сообщений (pull), когда «умный» потребитель сам извлекает нужные сообщения из топика. Kafka не отслеживает, какие записи читает потребитель, а просто хранит записи в течение заранее определенного периода времени или до тех пор, пока не достигнут заданный лимит. Клиенты запрашивают у Kafka новые сообщения и указывают записи, которые хотят прочитать. Это позволяет клиентам воспроизводить и повторно обрабатывать события, увеличивая или уменьшая смещение по мере необходимости. Потребители, по сути, представляют собой группы потребителей с одним или несколькими процессами потребления внутри. Каждый раздел подключен только к одному процессу-потребителю на группу, чтобы предотвратить дублирование чтения сообщений.
Ключевыми достоинствами Apache Kafka считаются следующие:
- высокая производительность – обработка большого объема потоковых данных в реальном времени, высокая пропускная способность для публикации и подписки;
- горизонтальная масштабируемость и отказоустойчивость, включая управление сбоями мастер-системы и базы данных без простоев и потери сообщений;
- возможности преобразования данных и создания новых потоков из исходных;
- долговечность через сохранение сообщений на диске с использованием распределенных журналов фиксации;
- репликация сообщений между брокерами и кластерами.
Как устроен AWS Kinesis и что выбрать
Подобно Apache Kafka, AWS Kinesis представляет собой платформу обработки потоковых данных в реальном времени. Однако, это полностью управляемый сервис Amazon, что избавляет пользователей от сложных задач администрирования и сопровождения этой платформы. AWS Kinesis состоит из 4-х компонентов: Kinesis Video Streams, Kinesis Data Streams, Kinesis Data Firehose и Kinesis Data Analytics. Kinesis Data Streams может собирать и обрабатывать огромные потоки записей данных в режиме реального времени. Он позволяет обрабатывать и анализировать данные по мере их поступления и немедленно реагировать на эти события. Приложения-продюсеры загружают записи в Kinesis Data Streams, используя библиотеку Kinesis Producer Library (KPL). Аналогично разделам Kafka, в Kinesis есть понятие шарда, который представляет собой сегмент записей данных. Порядковый номер, ключ раздела и большой двоичный объект данных (неизменяемая последовательность байтов до 1 МБ) составляют запись данных. Приложения-потребители обрабатывают записи, которые они получают из Kinesis Data Streams. Разрабатывать такие приложения можно с помощью клиентской библиотеки Kinesis, Kinesis API или Kinesis Data Analytics (KCL).
AWS Kinesis обладает следующими возможностями:
- полностью управляемый – запускает потоковые приложения, не требуя управления инфраструктурой;
- эластичная масштабируемость по требованию гарантирует обработку потоковых данных из десятков тысяч источников с очень малыми задержками, сохраняя записи до истечения срока их действия;
- долговечность – почти сразу после добавления данных приложение Kinesis может начать использовать содержимое потока;
- клиентские библиотеки поддерживают масштабируемость приложений Kinesis, обеспечивая отказоустойчивое потребление данных из потоков;
- безопасность – шифрование на стороне сервера и защита при хранении с помощью главных ключей AWS KMS. Для получения частного доступа к данным можно использовать виртуальное частное облако Amazon (VPC, Virtual Private Cloud).
Чтобы понять отличия Apache Kafka от AWS Kinesis, сравним их по ряду критериев.
Критерий |
Apache Kafka |
AWS Kinesis Data Streams |
Порядок данных |
На уровне разделов |
На уровне шардов |
Хранение данных |
Задается конфигурацией |
1-7 дней, по умолчанию 24 часа |
Размер блоб-объекта |
По умолчанию 1 МБ, настраивается |
Максимум 1 МБ |
Изменение раздела/шарда |
Только увеличение без перераспределения существующих данных |
Перераспределение путем слияния или разделения шардов |
Ограничения разделения |
Не ограничено |
200-500 шардов на географический регион |
Репликация данных |
Зеркалирование кластера |
Автоматически по 3 зонам доступности |
Семантика доставки сообщений |
Строго однократная (exactly once) |
Как минимум один раз (at least once) |
Безопасность |
SSL/SASL и аутентификация подключений к брокерам Kafka от клиентов; аутентификация соединений от брокеров к ZooKeeper; шифрование данных с помощью SSL/TLS |
Шифрование данных в состоянии покоя на стороне сервера и главных ключей AWS KMS. Доступ к данным в частном порядке через Amazon VPC |
Мониторинг |
Создание отчетов о метриках на сервере с Yammer Metrics |
AWS CloudWatch and CloudTrail |
Зависимости |
Apache Zookeeper |
DynamoDB |
Таким образом, Apache Kafka – отличный выбор, если нужно хранить сообщения больше недели, без ограничения размера сообщения для blob-объекта. Эта масштабируемая и надежная платформа дает полную гибкость и все преимущества распределенного инструмента потоковой передачи событий, но требует много усилий в управлении.
AWS предлагает управляемую потоковую передачу для Kafka с настройками и конфигурацией, основанными на передовых методах развертывания без проблем настройки и масштабирования. Также облачный сервис берет на себя управление кластерами в производственной среде, позволяя сконцентрироваться на разработке, а не на администрировании Apache Kafka. Это упрощает процесс внедрения технологии потоковой передачи. Но, будучи готовым решением, Kinesis имеет больше ограничений, чем Apache Kafka и может стать дороже в эксплуатации при неоптимальной конфигурации облачных ресурсов.
Освойте администрирование и эксплуатацию Apache Kafka для потоковой аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники