Почему производительность 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 K
Сделаем сравнение в табличном виде.
Освойте все тонкости работы с Apache Kafka на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Копирование, размножение, распространение, перепечатка (целиком или частично), или иное использование материала допускается только с письменного разрешения правообладателя ООО "УЦ Коммерсант"