Похоже, релизы Kafka в последнее время набирают обороты. Версия 0.9 была выпущена около 6 месяцев назад, а 0.10 — около месяца назад. Эти выпуски обычно имеют большое значение, потому что до недавнего времени это означало, что обновление двоичного файла Kafka означало одновременное обновление (неявного) протокола сообщений и двоичного файла. Начиная с версии 0.9, их можно разделить. Люди Кафки только начали проводить это различие. Это полезно, потому что это означает, что у нас есть возможность обновить двоичный файл Kafka, сохраняя версию протокола одинаковой, с помощью двух следующих параметров конфигурации: `inter.broker.protocol.version' и `log.message.format.version`. Оба должны быть установлены на версию, на которую мы ориентируемся, чтобы это работало.

Вот 3 драйвера для Python, а также версия Kafka, которую они официально поддерживают:

Что касается изменений API для этих 3-х проектов, то их немного. Высокоуровневый интерфейс оставался неизменным в версиях 0.8–0.10.

Для изменений формата сообщений в версии 0.10 есть небольшие изменения, которые не должны повлиять на большинство пользователей этих библиотек. Основное изменение в формате сообщения — введение поля timestamp. Вот как влияют на 3 драйвера при использовании сообщений, когда версия протокола 0.10:

  • Класс ConsumerRecord в kafka-python устанавливает для полей timestamp и timestamp_type соответствующие значения, если они есть.
  • Класс pykafka Message не отображает это поле.
  • Класс confluent-kafka-python Message также не отображает это поле.

Обратите внимание, что все 3 драйвера успешно читают сообщения, созданные протоколом 0.10, просто некоторые поля отсутствуют или вообще не установлены pykafka или confluent-kafka-python. На данный момент kafka-python — единственный драйвер с полной поддержкой протокола 0.10.

В основном это хорошая новость для пользователей Python Kafka, поскольку это означает, что люди могут перейти на версию 0.10, не слишком беспокоясь о проблемах с форматом сообщений.