Почему производительность confluent-kafka выше, чем у kafka-python, чем еще отличаются эти Python-библиотеки для разработки клиентов Apache Kafka, и что выбирать.
Сравнение Python-библиотек для разработки клиентов Kafka
Хотя Java считается более подходящей для создания высоконагруженных приложений, многие разработчики используют Python, который намного проще. Этот язык программирования подходит даже для написания продюсеров и потребителей Apache Kafka. Но в этом случае перед разработчиком встает выбор: какую библиотеку использовать. Например, раньше я обычно пользовалась библиотекой kafka-python. Однако, у нее есть альтернатива — confluent-kafka. Эти библиотеки в целом очень похожи по назначению и набору возможностей, но отличаются некоторыми деталями.
Библиотека confluent-kafka представляет собой Python-клиент Confluent для Apache Kafka, который предоставляет высокоуровневый Producer, Consumer и AdminClient, совместимый со всеми версия платформы потоковой передачи событий выше v0.8, Confluent Cloud и Confluent Platform. Этот клиент отличается высокой надежностью, поскольку является оболочкой вокруг библиотеки librdkafka, которая широко развернута в разнообразном наборе производственных сценариев. В свою очередь, librdkafka — это реализация библиотеки на языке C протокола Apache Kafka, предоставляющая клиентов Producer, Consumer и Admin. Она позволяет публиковать свыше 1 миллиона сообщений в секунду и потреблять 3 миллиона сообщений в секунду. Будучи основанной на librdkafka, библиотека confluent-kafka также обеспечивает высокую производительность: ее максимальная пропускная способность и задержка соответствует клиенту Java, накладные расходы интерпретатора Python не оказывают существенного влияния. А поскольку confluent-kafka выпускается командой Confluent, основанной создателями самой Apache Kafka, ее клиентские функции соответствуют потоковой платформы и компонентам Confluent. Пример такой работы я показывала здесь.
В свою очередь, kafka-python – это чистый Python-клиент для Apache Kafka, разработанный так, чтобы работать подобно официальному клиенту Java, с добавлением некоторых интерфейсов Python (например, итераторов-потребителей). Однако, kafka-python лучше всего использовать с новыми брокерами свыше версии 0.9, хотя библиотека поддерживает обратную совместимость со старыми версиями до 0.8.0. Тем не менее, некоторые функции поддерживаются только на новых брокерах. Например, полностью координированные группы потребителей, т. е. динамическое назначение разделов нескольким потребителям в одной группе, требуют Apache Kafka 0.9. Поддержка этой функции для более ранних выпусков брокеров потребует написания и поддержки пользовательского кода выбора лидера и членства в группе, а также проверки работоспособности потребителей. Для старых версий платформы потоковой передачи событий можно реализовать это самостоятельно, вручную назначая разные разделы каждому экземпляру потребителя с помощью DevOps-инструментов управления конфигурацией, таких как chef, ansible и пр. Этот подход будет работать нормально, хотя изначально он не поддерживает повторную балансировку потребителей при сбоях.
Таким образом, можно сравнить confluent-kafka и kafka-python по следующим критериям:
- происхождение;
- производительность;
- поддерживаемые функции;
- совместимость с Apache Kafka
Сделаем сравнение в табличном виде.
Критерий | confluent-kafka | kafka-python | Вывод |
Происхождение | От компании Confluent, основанной создателями Apache Kafka | От сообщества | Библиотека confluent-kafka имеет более полную документацию и поддержку со стороны Confluent, чем kafka-python |
Производительность | Очень высокая производительность благодаря базовой реализации на основе C-библиотеки librdkafka | Средняя производительность из-за накладных расходов трансляции Python-кода в Java | Если нужна высокая производительность, лучше выбирать confluent-kafka |
Поддерживаемые функции | предлагает полный набор API и функций, включая поддержку транзакций, сериализацию Apache Avro и сжатие сообщений, предоставляет более явный асинхронный API с использованием обратных вызовов и библиотеки librdkafka, что позволяет лучше контролировать поток обработки сообщений | включает большинство основных функций, но по умолчанию не поддерживает сериализацию Apache Avro, поддерживает асинхронные операции с использованием Python-библиотеки asyncio | Функциональные возможности confluent-kafka шире, чем у kafka-python |
Совместимость с Apache Kafka | обеспечивает раннюю поддержку новых версий Kafka, гарантируя совместимость с последними функциями и улучшениями | Может отставать от последних версий платформы | Если нужны самые последние новинки Apache Kafka, confluent-kafka их поддерживает, что не гарантирует kafka-python |
Освойте все тонкости работы с Apache Kafka на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
- Apache Kafka для инженеров данных
- Администрирование кластера Kafka
- Администрирование Arenadata Streaming Kafka
Источники