Представляем Apache Kafka 4.4.0

Источник: Confluent•

Представляем Apache Kafka 4.4.0

The Apache Software Foundation рада объявить о выходе Apache Kafka® 4.4.0. Этот выпуск содержит множество новых функций и улучшений.

Анонс выпуска Apache Kafka 4.4.0

Автор: Omnia Ibrahim | Четверг, 22 октября 2026 г.

Мы рады объявить о выходе Apache Kafka® 4.4.0. Этот выпуск содержит множество новых функций и улучшений. В этой записи блога будут освещены некоторые из наиболее заметных. Полный список изменений можно найти в примечаниях к выпуску.

Включая 25 предложений KIP и 963 коммита с момента выхода версии 4.3.0, этот выпуск добавляет множество новых функций, улучшений и исправлений ошибок во все компоненты.

Список важных изменений и подробные инструкции по обновлению см. в разделе Upgrading to 4.4 в документации.

Уведомления об устаревании

Конфигурация брокера broker.id объявлена устаревшей.

  • KIP-1200: Deprecate ClientQuotaCallback#updateClusterMetadata Метод ClientQuotaCallback#updateClusterMetadata объявлен устаревшим и будет удален в Kafka 5.0. Пользовательским реализациям ClientQuotaCallback больше не нужно переопределять этот метод, так как теперь предоставляется реализация по умолчанию, не выполняющая никаких действий.

Метод ClientQuotaCallback#updateClusterMetadata объявлен устаревшим и будет удален в Kafka 5.0. Пользовательским реализациям ClientQuotaCallback больше не нужно переопределять этот метод, так как теперь предоставляется реализация по умолчанию, не выполняющая никаких действий.

  • KIP-1301: Deprecate Yammer-based metrics in GroupCoordinatorMetrics Оставшиеся классические метрики группы на базе Yammer в GroupCoordinatorMetrics (NumGroups, NumOffsets, NumGroupsPreparingRebalance, NumGroupsCompletingRebalance, NumGroupsStable, NumGroupsDead) объявляются устаревшими и заменяются эквивалентными счетчиками Kafka Metrics, зарегистрированными под MBean kafka.server:type=group-coordinator-metrics.

Оставшиеся классические метрики группы на базе Yammer в GroupCoordinatorMetrics (NumGroups, NumOffsets, NumGroupsPreparingRebalance, NumGroupsCompletingRebalance, NumGroupsStable, NumGroupsDead) объявляются устаревшими и заменяются эквивалентными счетчиками Kafka Metrics, зарегистрированными под MBean kafka.server:type=group-coordinator-metrics.

Брокер, контроллер, продюсер, консьюмер и административный клиент Kafka

  • KIP-1170: Unify cluster metadata bootstrapping Каталоги хранения, отформатированные инструментом kafka-storage, больше не обладают обратной совместимостью: теперь версия брокера должна быть равна или новее версии инструмента kafka-storage, который отформатировал его каталог, независимо от выбранного флага --release-version во время форматирования.

Каталоги хранения, отформатированные инструментом kafka-storage, больше не обладают обратной совместимостью: теперь версия брокера должна быть равна или новее версии инструмента kafka-storage, который отформатировал его каталог, независимо от выбранного флага --release-version во время форматирования.

  • KIP-909: Allow Clients to Rebootstrap Upon Failed DNS Resolution Добавлена новая клиентская конфигурация bootstrap.resolve.timeout.ms, управляющая выполнением DNS-разрешения bootstrap.servers. Значение по умолчанию 0 сохраняет историческое синхронное поведение; положительное значение включает асинхронное разрешение bootstrap, при котором конструктор клиента возвращает управление немедленно, а ошибки проявляются позже в виде BootstrapResolutionException. Это развивающаяся функция, которая может измениться в минорном релизе. Kafka Streams и Kafka Connect пока не поддерживают асинхронное разрешение bootstrap.

Добавлена новая клиентская конфигурация bootstrap.resolve.timeout.ms, управляющая выполнением DNS-разрешения bootstrap.servers. Значение по умолчанию 0 сохраняет историческое синхронное поведение; положительное значение включает асинхронное разрешение bootstrap, при котором конструктор клиента возвращает управление немедленно, а ошибки проявляются позже в виде BootstrapResolutionException. Это развивающаяся функция, которая может измениться в минорном релизе. Kafka Streams и Kafka Connect пока не поддерживают асинхронное разрешение bootstrap.

  • KIP-1265: Mechanism for automatic detection of internal API usage Представлен механизм проверки API на этапе сборки, основанный на явных аннотациях @InterfaceAudience, который вызывает сбой сборки, если внутренний класс импортируется в публичный API или предоставляется через него, что предотвращает случайную утечку внутренних классов в публичную поверхность Kafka.

Представлен механизм проверки API на этапе сборки, основанный на явных аннотациях @InterfaceAudience, который вызывает сбой сборки, если внутренний класс импортируется в публичный API или предоставляется через него, что предотвращает случайную утечку внутренних классов в публичную поверхность Kafka.

  • KIP-1319: Align TxnOffsetCommit API with OffsetCommit API Представлен TxnOffsetCommit v6, приводящий транзакционный API коммита смещений к паритету с OffsetCommit: теперь он содержит идентификаторы топиков вместо имен топиков, переименовывает GenerationId в GenerationIdOrMemberEpoch и выводит детализированные коды ошибок, такие как GROUP_ID_NOT_FOUND, STALE_MEMBER_EPOCH и UNKNOWN_TOPIC_ID, вместо их объединения в ILLEGAL_GENERATION.

Представлен TxnOffsetCommit v6, приводящий транзакционный API коммита смещений к паритету с OffsetCommit: теперь он содержит идентификаторы топиков вместо имен топиков, переименовывает GenerationId в GenerationIdOrMemberEpoch и выводит детализированные коды ошибок, такие как GROUP_ID_NOT_FOUND, STALE_MEMBER_EPOCH и UNKNOWN_TOPIC_ID, вместо их объединения в ILLEGAL_GENERATION.

  • KIP-1312: Support unregistering controllers Контроллеры теперь могут быть отменены в метаданных кластера. Доступны новая команда kafka-cluster.sh unregister-controller и флаг --unregister для kafka-metadata-quorum.sh remove-controller, поддерживаемые новым API Admin#unregisterController и RPC UnregisterController. Это вводит код ошибки CONTROLLER_ID_NOT_REGISTERED (136) и требует версию метаданных 4.4-IV2.

Контроллеры теперь могут быть отменены в метаданных кластера. Доступны новая команда kafka-cluster.sh unregister-controller и флаг --unregister для kafka-metadata-quorum.sh remove-controller, поддерживаемые новым API Admin#unregisterController и RPC UnregisterController. Это вводит код ошибки CONTROLLER_ID_NOT_REGISTERED (136) и требует версию метаданных 4.4-IV2.

  • KIP-1220: Add an api-versions command to kafka-cluster.sh Инструмент kafka-cluster.sh теперь предоставляет команду api-versions для отображения версий API, поддерживаемых брокерами или контроллерами, принимая как --bootstrap-server, так и --bootstrap-controller. В результате kafka-broker-api-versions.sh объявлен устаревшим и будет удален в следующем мажорном релизе; используйте kafka-cluster.sh api-versions вместо этого.

Инструмент kafka-cluster.sh теперь предоставляет команду api-versions для отображения версий API, поддерживаемых брокерами или контроллерами, принимая как --bootstrap-server, так и --bootstrap-controller. В результате kafka-broker-api-versions.sh объявлен устаревшим и будет удален в следующем мажорном релизе; используйте kafka-cluster.sh api-versions вместо этого.

  • KIP-1241: Reduce tiered storage redundancy with delayed upload Представлены параметры конфигурации remote.copy.lag.bytes и remote.copy.lag.ms вместе с соответствующими конфигурациями на уровне брокера, позволяющие уменьшить избыточность многоуровневого хранилища с помощью отложенной выгрузки.

Представлены параметры конфигурации remote.copy.lag.bytes и remote.copy.lag.ms вместе с соответствующими конфигурациями на уровне брокера, позволяющие уменьшить избыточность многоуровневого хранилища с помощью отложенной выгрузки.

  • KIP-1242: Detect and handle misrouted client connections Когда клиенты подключаются к кластеру, они теперь включают информацию о кластере и узле для обеспечения обнаружения и обработки неправильно маршрутизированных подключений.

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

  • KIP-1291: Expose additional Linux I/O metrics via JMX Коллектор метрик ввода-вывода Linux теперь передает все 7 полей из /proc/self/io через JMX, добавляя linux-disk-rchar, linux-disk-wchar, linux-disk-syscr, linux-disk-syscw и linux-disk-cancelled-write-bytes наряду с существующими метриками байтов чтения/записи. Это позволяет операторам рассчитывать коэффициенты попадания в кэш страниц, обнаруживать усиление записи, выявлять неэффективные паттерны системных вызовов и контролировать активность ввода-вывода при уплотнении логов.

Коллектор метрик ввода-вывода Linux теперь передает все 7 полей из /proc/self/io через JMX, добавляя linux-disk-rchar, linux-disk-wchar, linux-disk-syscr, linux-disk-syscw и linux-disk-cancelled-write-bytes наряду с существующими метриками байтов чтения/записи. Это позволяет операторам рассчитывать коэффициенты попадания в кэш страниц, обнаруживать усиление записи, выявлять неэффективные паттерны системных вызовов и контролировать активность ввода-вывода при уплотнении логов.

  • KIP-1299: Control key distribution in kafka-producer-perf-test Инструмент kafka-producer-perf-test.sh теперь поддерживает параметры --record-key-range, --key-distribution и --random-seed для управления распределением ключей записей. Используйте --key-distribution range для последовательного (round-robin) назначения ключей или random для случайного выбора ключей, а --random-seed позволяет обеспечить воспроизводимость запусков тестов производительности.

Инструмент kafka-producer-perf-test.sh теперь поддерживает параметры --record-key-range, --key-distribution и --random-seed для управления распределением ключей записей. Используйте --key-distribution range для последовательного (round-robin) назначения ключей или random для случайного выбора ключей, а --random-seed позволяет обеспечить воспроизводимость запусков тестов производительности.

  • KIP-1323: Initialize share group offsets from a file Инструмент kafka-share-groups.sh теперь может использоваться для инициализации смещений групп совместного использования (share groups) из файла, что позволяет инициализировать группу совместного использования на основе зафиксированных смещений группы потребителей.

Инструмент kafka-share-groups.sh теперь может использоваться для инициализации смещений групп совместного использования (share groups) из файла, что позволяет инициализировать группу совместного использования на основе зафиксированных смещений группы потребителей.

Kafka Streams

  • KIP-1340: Expose Both Mapped Key and Stream Key in Streams-GlobalKTable Joins Добавлен новый интерфейс соединителя ValueJoinerWithStreamAndMappedKey и новые перегрузки KStream#join/leftJoin для соединений KStream-GlobalKTable, предоставляющие пользователям доступ как к сопоставленному ключу соединения, так и к исходному ключу записи потока без необходимости его повторного вычисления. Существующие перегрузки на базе ValueJoinerWithKey помечены как устаревшие, но их поведение не изменилось.

Добавлен новый интерфейс соединителя ValueJoinerWithStreamAndMappedKey и новые перегрузки KStream#join/leftJoin для соединений KStream-GlobalKTable, предоставляющие пользователям доступ как к сопоставленному ключу соединения, так и к исходному ключу записи потока без необходимости его повторного вычисления. Существующие перегрузки на базе ValueJoinerWithKey помечены как устаревшие, но их поведение не изменилось.

  • KIP-1331: Streams Group Topology Description Plugin Позволяет брокерам записывать удобочитаемое описание топологии обработки группы Streams с помощью подключаемого бэкенда. Когда задан параметр group.streams.topology.description.plugin.class, клиенты Kafka Streams автоматически отправляют координатору группы описание, эквивалентное Topology#describe(), которое можно получить через Admin#describeStreamsGroups или kafka-streams-groups.sh --describe --topology — без доступа к исходному коду приложения.

Позволяет брокерам записывать удобочитаемое описание топологии обработки группы Streams с помощью подключаемого бэкенда. Когда задан параметр group.streams.topology.description.plugin.class, клиенты Kafka Streams автоматически отправляют координатору группы описание, эквивалентное Topology#describe(), которое можно получить через Admin#describeStreamsGroups или kafka-streams-groups.sh --describe --topology — без доступа к исходному коду приложения.

  • KIP-1357: Broker-side custom task assignors for Streams groups Группы Streams теперь поддерживают пользовательские распределители задач на стороне брокера, регистрируемые через новую конфигурацию брокера group.streams.assignors и выбираемые для каждой группы с помощью новой конфигурации группы streams.assignor.name.

Группы Streams теперь поддерживают пользовательские распределители задач на стороне брокера, регистрируемые через новую конфигурацию брокера group.streams.assignors и выбираемые для каждой группы с помощью новой конфигурации группы streams.assignor.name.

  • KIP-892: Transactional Semantics for StateStores Добавлены транзакционные хранилища состояния, включаемые с помощью новой конфигурации enable.transactional.statestores (по умолчанию false). При включении хранилища состояния больше не очищаются и не пересоздаются при ошибке в режиме обработки «точно один раз» (exactly-once); теряются и перезапускаются только записи, сделанные после последнего успешного коммита. Новые конфигурации statestore.uncommitted.max.bytes и default.interactive.query.isolation.level управляют размером незафиксированного буфера и уровнем изоляции интерактивных запросов.

Добавлены транзакционные хранилища состояния, включаемые с помощью новой конфигурации enable.transactional.statestores (по умолчанию false). При включении хранилища состояния больше не очищаются и не пересоздаются при ошибке в режиме обработки «точно один раз» (exactly-once); теряются и перезапускаются только записи, сделанные после последнего успешного коммита. Новые конфигурации statestore.uncommitted.max.bytes и default.interactive.query.isolation.level управляют размером незафиксированного буфера и уровнем изоляции интерактивных запросов.

  • KIP-1356: Introduce IQv2 for headers-aware state stores Добавлено четыре типа запросов IQv2 (TimestampedKeyWithHeadersQuery, TimestampedRangeWithHeadersQuery, TimestampedWindowKeyWithHeadersQuery, TimestampedWindowRangeWithHeadersQuery), которые возвращают заголовки записей из хранилищ состояния с поддержкой заголовков, представленных в KIP-1271.

Добавлено четыре типа запросов IQv2 (TimestampedKeyWithHeadersQuery, TimestampedRangeWithHeadersQuery, TimestampedWindowKeyWithHeadersQuery, TimestampedWindowRangeWithHeadersQuery), которые возвращают заголовки записей из хранилищ состояния с поддержкой заголовков, представленных в KIP-1271.

  • KIP-1321: Headers aware StreamPartitioner Интерфейс StreamPartitioner получает новый метод partitions(topic, key, value, headers, numPartitions), получающий заголовки записей. Существующий метод без заголовков помечен как устаревший.

Интерфейс StreamPartitioner получает новый метод partitions(topic, key, value, headers, numPartitions), получающий заголовки записей. Существующий метод без заголовков помечен как устаревший.

  • KIP-1284: Introduce CloseOptions.DEFAULT for Kafka Streams Добавлено значение GroupMembershipOperation.DEFAULT, которое теперь является значением по умолчанию для CloseOptions. В рамках протокола ребалансировки потоков динамические участники покидают группу при закрытии, в то время как статические остаются.

Добавлено значение GroupMembershipOperation.DEFAULT, которое теперь является значением по умолчанию для CloseOptions. В рамках протокола ребалансировки потоков динамические участники покидают группу при закрытии, в то время как статические остаются.

  • KIP-1283: Clarify KafkaStreams cleanUp semantics KafkaStreams#cleanUp() больше не записывает предупреждение (WARN) в лог, если каталог состояния не может быть удален только потому, что файлы метаданных процесса и блокировки остаются. В этом случае очистка считается успешной.

KafkaStreams#cleanUp() больше не записывает предупреждение (WARN) в лог, если каталог состояния не может быть удален только потому, что файлы метаданных процесса и блокировки остаются. В этом случае очистка считается успешной.

  • KIP-1245: Enforce ‘application.server’ format at config level Параметр application.server теперь проверяется при создании StreamsConfig и должен быть пустым или представлять собой действительную конечную точку host:port. Недействительные значения вызывают ошибку ConfigException на раннем этапе.

Параметр application.server теперь проверяется при создании StreamsConfig и должен быть пустым или представлять собой действительную конечную точку host:port. Недействительные значения вызывают ошибку ConfigException на раннем этапе.

Kafka Connect

  • KIP-1209: Add configuration to control internal topic creation in Kafka Connect Распределенные воркеры Kafka Connect теперь поддерживают конфигурацию internal.topics.automatic.creation.enable (по умолчанию true). Если установлено значение false, Connect не будет автоматически создавать свои внутренние топики (топики смещений, конфигурации, статуса и специфичные для коннекторов топики смещений), а вместо этого завершит работу с ошибкой при запуске, если какой-либо из них отсутствует. Для ручного создания этих топиков предоставляется новый инструмент connect-internal-topics.sh.

Распределенные воркеры Kafka Connect теперь поддерживают конфигурацию internal.topics.automatic.creation.enable (по умолчанию true). Если установлено значение false, Connect не будет автоматически создавать свои внутренние топики (топики смещений, конфигурации, статуса и специфичные для коннекторов топики смещений), а вместо этого завершит работу с ошибкой при запуске, если какой-либо из них отсутствует. Для ручного создания этих топиков предоставляется новый инструмент connect-internal-topics.sh.

Сводка

Готовы начать работу с Apache Kafka 4.4.0? Ознакомьтесь со всеми подробностями в заметках об обновлении и заметках о выпуске, а также download Apache Kafka 4.4.0.

Это был результат совместной работы сообщества, поэтому спасибо всем, кто внес свой вклад в этот релиз, включая всех наших пользователей и 151 контрибьютора (и 8 ИИ): Matthias J. Sax, Ken Huang, Mickael Maison, Nick Telford, Sushant Mahajan, majialong, PoAn Yang, David Jacot, Murali Basani, Alieh Saeedi, Lianet Magrans, Bill Bejeck, Ming-Yen Chung, Sean Quah, Andrew Schofield, Apoorv Mittal, TengYao Chi, ChickenchickenLove, Sanskar Jhajharia, Gabriella Fu, Lucy Liu, Maros Orsak, nileshkumar3, Evan Zhou, YANG-SYUAN CHOU, Alan Lau, Jess668, Lucas Brutschy, Uladzislau Blok, Chia-Yi Chiu, Eric Chang, Federico Valeri, Kuan-Po Tseng, Aditya Kousik, Gaurav Narula, Nikita Shupletsov, TaiJuWu, Gavin Wang, Jiayao Sun, Shekhar Prasad Rajak, Chih-Yuan Chien, Eduwer Camacaro, Gergely Harmadas, Manikumar Reddy, Mingi Cho, Paolo Patierno, Ivan Yurchenko, Nick Guo, Omnia Ibrahim, gomudayya, sstremler, Bolin Lin, Christo Lolov, CoderBruis, Dejan Stojadinović, Dongnuo Lyu, Edoardo Comar, Igor Soarez, Jian, KC.H, Kevin Wu, Lan Ding, LeiXiaoGao, Parker Chang, Russole Chen, Sebastien Viale, yangxuze, Adam Souquières, Arpit Goyal, Avishek Das, Gabriel Dutra, Hector Geraldino, Jakub Scholz, Kai Jay Tu, Kartikay Dubey, Kirk True, Luke Chen, Park Jiwon, RonGamzu, Sahil Devgon, Yunchi Pang, Zheguang Zhao, Zhiyan Tang, ashwinpankaj, dependabot[bot], gabriellefu, mannoopj, red-flames, zoo-code, 조형준, Abhijeet Kumar, Adam Horky, Alyssa Huang, Amir Sarabadani, Andy Huang, Angelo R., Anton Liauchuk, Aravind Reveendran, Arnab Nandy, Arpit Jain, Atharv Chavan, Brian Sang, Chang-Chi Hsu, Charlie Zhang, Daeho Kwon, Daniel Tschinder, David Simon, Davide Armand, Derek Ko, Diya Hussein, Dmitry Werner, Fatorin, Ganesh Manchi, Gimin Kim, Gyeongwon Do, Hana, Ivan Malutin, Joanna-D, Jonah Hooper, José Armando García Sancio, Kamal Chandraprakash, Kenan Adel, Kondrat Bertalan, Lucas Ma, Mirko Alicastro, Nandini Singhal, Nikolaus Schuetz, Nishant Kumar, Prabhash Kumar, Rajarshi Misra, Rion Williams, Ritika Reddy, Ritikj55, S.Y. Wang, Sepuri Sai Krishna, Shivsundar R, Siddhartha Devineni, Taeik Lim, Tamas Kornai, Tommi Vainikainen, Truc Nguyen, Viktor Somogyi-Vass, Xi, Yu-Chia Ma, akhil-sabu-ibm, amandayclee, averemee-si, minjcho, subbudvk, winfriedgerlach

О чём эта статья

Ещё в разделе «Данные и аналитика»

Все →

Ещё от Confluent