Apache Kafka vs AWS Kinesis: сходства и отличия

Apache Kafka vs AWS Kinesis, Kafka для архитекторов и разработчиков, архитектура данных обучение примеры курсы, разработка Kafka-приложений, обучение Kafka, курсы Kafka, Apache Kafka для инженеров и разработчиков, обучение разработчиков Kafka и дата-инженеров, обучение большим данным, Школа Больших Данных Учебный Центр Коммерсант

В связи с активным переходом от локальной ИТ-инфраструктуры в облачные полностью управляемые сервисы многие ИТ-архитекторы и дата-инженеры задумываются о замене собственного кластера 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 в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. http://www.itcheerup.net/2019/01/kafka-vs-kinesis/
  2. https://docs.aws.amazon.com/streams/latest/dev/key-concepts.html
Поиск по сайту