Apache Kafka 3.6: что нового?

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

10 октября 2023 года вышел очередной релиз самой популярной распределенной платформы потоковой передачи событий. Знакомимся с главными новинками Apache Kafka 3.6.0: промышленная поддержка KRaft  вместо ZooKeeper, оптимизация транзакций, повышение производительности памяти и другие фичи свежего релиза для разработчика, дата-инженера и администратора.

ТОП-10 новинок выпуска 3.6

Apache Kafka 3.6.0 включает 6 новых фич, более 50 улучшений и 70 исправленных ошибок. Начнем с самых главных новинок. Поскольку в 4-м выпуске планируется удалить синхронизацию метаданных кластера с помощью ZooKeeper, этот сервис помечен как устаревший уже в версии Apache Kafka 3.5.0, о которой мы писали здесь. В октябрьском выпуске 3.6.0 возможность миграции кластеров Kafka из ZooKeeper в систему метаданных KRaft теперь готова к использованию в производственных средах. Однако, поддержка JBOD по-прежнему недоступна для кластеров Kraft. Поэтому кластеры, использующие JBOD, пока не могут быть перенесены. Впрочем, в релизе 3.7 уже добавлена поддержка JBOD в кластерах на базе KRaft, позволяющая вести несколько каталогов журналов для каждого брокера. Это позволяет уже в производственном режиме запускать крупные развертывания с несколькими устройствами хранения на каждого брокера.

Kafka 3.6 теперь полностью поддерживает токены делегирования в Kraft, что сокращает разрыв в функциях между кластерами Kafka на базе ZooKeeper и KRaft. Миграция токенов делегирования из ZooKeeper в KRaft также включена в версию 3.6. Пока еще ZooKeeper поддерживается, поэтому его версия, поставляемая в комплекте с Kafka, обновлена до 3.8.2, что включает несколько обновлений и улучшений безопасности.

Чтобы повысить общую надежность слоя KRaft, добавлены транзакции метаданных. KRaft использует пакеты записей в качестве механизма атомарности. Обычно на уровне консенсуса Raft существовало ограничение на размер выборки, и контроллер мог генерировать набор атомарных записей, превышающих этот предел. В свежем выпуске представлены записи маркеров, которые позволяют отправлять большие наборы атомарных записей на уровень консенсуса Raft несколькими пакетами. Это обходит ограничение выборки. Кроме того, добавлены для измерения производительности KRaft добавлены новые показатели контроллера, загрузчика и источника моментальных снимков.

Для улучшения целостности данных и предотвращения ошибок, вызванных неточной обработкой временных меток сообщений добавлена дополнительная логика их проверки. Ранее будущие отметки timestamp могли представлять собой неправильно отформатированное целое число. Теперь сообщения с подобными метками времени отклоняются и вызывают описательное исключение.

Еще одним важным обновлением Kafka 3.6 стала поддержка многоуровневого хранилища как функции раннего доступа, пока рекомендуемой для тестирования в непроизводственных средах. Это обеспечивает разделение вычислений и плавное расширение хранилища для удаленных объектов, встроенное в Kafka, предполагая минимальные эксплуатационные изменения. О том, что такое многоуровневое хранилище, и как именно Apache Kafka реализует долговременное хранение данных, мы подробно рассматривали в этой статье.

Чтобы улучшить управление удаленными логами, добавлены дополнительные пользовательские метаданные как часть метаданных сегмента удаленного журнала. RemoteStorageManager возвращает дополнительные пользовательские метаданные при вызове функции copyLogSegmentData().

Также в свежем релизе начата работа по устранению зависания транзакций путем проверки добавления разделов. Зависание транзакций может негативно повлиять на потребителей и помешать сжатию уже сжатых логов. В версии 3.6.0 добавлена проверка транзакций, чтобы предотвратить их зависание на разделах.  В следующем выпуске будут реализованы фиксации смещения транзакций.

Ранее Kafka не поддерживала дублирующиеся слушателей на одном и том же порту. Это становилось проблемой при одновременной работе с IPv4 и с IPv6. Теперь брокеры могут быть настроены на слушателей с одним и тем же портом в разных стеках протокола IP. Наконец, из инфраструктурных новинок в версии 3.6. стала оптимизация потребления памяти во время десериализации записей за счет использования ByteBuffer вместо byte[]. Обновленные общедоступные интерфейсы включают классы Deserializer, ByteBufferDeserializer и StringDeserializer.

Новинки Kafka Streams и Kafka Connect

В Kafka Streams добавлен период отсрочки к соединению потоковых таблиц, чтобы улучшить обработку неупорядоченных данных на стороне таблицы. У присоединенного объекта есть новый метод под названием withGracePeriod(), который обеспечивает поиск на стороне таблицы только после прохождения заданного периода. Также теперь клиентская библиотека, позволяющая обращаться к данным в топиках поддерживает запросы диапазона для принятия нулевых нижних и верхних границ. Ранее RangeQuery не поддерживал значение null для указания границ. В версии 3.6. разработчик может передавать значение null в withRange(…) для нижней/верхней границы, чтобы указать полный или полуоткрытый диапазон, например:

  • withRange(null, null)== withNoBounds()
  • withRange(lower, null)== withLowerBound(lower)
  • withRange(null, upper)== withUpperBound(upper)

В интеграционной платформе Kafka Connect, о некоторых особенностях работы с которой мы писали здесь, теперь разрешено использование асинхронных коннекторов приемника с SMT-преобразованиями изменения топика. Это необходимо для устранения несовместимости между source-коннекторами, переопределяющими метод SinkTask::preCommit, и SMT-преобразованиями, которые изменяют поле топика SinkRecord. Также полностью реализована поддержка смещений в Kafka Connect благодаря добавлению конечных точек REST API для получения смещений и нового состояния STOPPED для коннекторов. Описание этих конечных точек изменения и сброса смещений приведено в таблице:

Маршрут HTTP-метод Описание
/connectors/{connector}/offsets GET получить смещения для существующего коннектора
PATCH изменить смещения существующего и остановленного коннектора, т.е. который находится в состоянии STOPPED
DELETE сброс смещений существующего и остановленного коннектора, т.е. который находится в состоянии STOPPED
/connectors/{connector}/pause PUT приостановка соединения с существующим коннектором

Наконец, улучшено обнаружение плагинов Kafka Connect. Теперь рабочие процессы могут читать манифесты ServiceLoader и информацию о плагинах непосредственно во время запуска для более эффективного обнаружения их классов, позволяя разработчикам коннекторов добавлять объявления сервисов в свои плагины.

Освойте администрирование и эксплуатацию Apache Kafka для потоковой аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

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

Источники

  1. https://kafka.apache.org/blog#apache_kafka_360_release_announcement
  2. https://downloads.apache.org/kafka/3.6.0/RELEASE_NOTES.html
Поиск по сайту