[Kafka Столбец 10] Механизм сжатия сообщений Kafka: от сохранения пропускной способности к снижению затрат на хранение
[Kafka Столбец 10] Механизм сжатия сообщений Kafka: от сохранения пропускной способности к снижению затрат на хранение

Имя автора:От лета до холода Об авторе: Сосредоточьтесь на Java и больших данных, стремимся исследовать границы технологий и делиться передовыми практиками и идеями. Колонка статей: Колонка Ся Чжиихань-Кафка Введение в колонку. Целью этой колонки является представление основных концепций, основных компонентов и сценариев использования Kafka в простой для понимания форме, а также пошаговое создание системы знаний об очередях сообщений и потоковой обработке, независимо от того, заинтересованы ли вы в распределенных системы или подготовка к работе с ними. Делая первый шаг в области больших данных, в этой колонке представлены все необходимые ресурсы, рекомендации и вопросы для собеседований. Подпишитесь бесплатно прямо сейчас и начните свой путь обучения Kafka!

Подробное объяснение механизма сжатия сообщений Kafka.

01 Введение

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

02 Ошибка сообщения Kafka не сжата

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

2.1 Больше использования дискового пространства

Несжатые сообщения занимают дисковое пространство в своем исходном размере. Если сообщения содержат много текста, изображений, видео или другого мультимедийного контента, каждое сообщение может быть большим. Со временем, когда в Kafka будут записаны миллионы или миллиарды таких сообщений, они займут огромные объемы дискового пространства.

2.2 Увеличение затрат на оборудование

Поскольку несжатые сообщения занимают больше места на диске, для хранения этих сообщений может потребоваться приобретение дополнительных устройств хранения или расширение существующей емкости хранилища. Сюда входят не только затраты на приобретение дополнительных жестких дисков, но также могут включаться другие затраты на инфраструктуру, связанную с хранилищем, например, на сеть хранения данных (SAN) или сетевое хранилище (NAS).

2.3 Возрастает сложность обслуживания
  • Управление данными:вместе схранилищеувеличение спроса,Управляйте большим количествомдиск Пространство становится сложнее。Это может включать мониторингдиск Использование、Регулярно очищайте старые данные、Оптимизация компоновки хранилища и другие задачи.
  • Вопросы производительности:когдадиск Когда пространство почти заполнено,Производительность файловой системы может ухудшиться,Это влияет на общую производительность Kafka. Для поддержания высокой производительности,Возможно, потребуется реализация более сложных решений для хранения данных.,Например, распределенные файловые системы или использование более быстрых носителей хранения, таких как твердотельные накопители (SSD).
  • Резервное копирование и восстановление:Многоданныетакже означает Резервное копирование и стратегии восстановления становятся более важными и сложными. Регулярное резервное копирование данных необходимо для предотвращения потери данных, а также для обеспечения быстрого восстановления данных в случае сбоя.
  • Проблемы масштабируемости:вместе сданныеколичественный рост,Может потребоваться горизонтальное расширение возможностей хранилища.,Обычно это предполагает добавление дополнительных узлов хранилища и управление согласованностью и избыточностью данных между этими узлами.
2.4 Увеличение нагрузки на полосу пропускания сети

Несжатые сообщения во время передачи потребляют больше пропускной способности сети. Поскольку Kafka — это распределенная система, производитель (Производитель) должен отправлять сообщения Брокеру, а потребитель (Потребитель) должен получать сообщения от Брокера. Если сообщения не сжимаются, эти операции будут потреблять больше пропускной способности сети, что может привести к перегрузке сети и задержкам передачи.

2.5 Увеличение накладных расходов ввода-вывода
  • Чтение и запись незапланированных сообщений требует большего количества операций ввода-вывода. Либо продюсер пишет сообщение в диск.,Или потребитель читает сообщение с диска?,Данные без сжатия приведут к большему количеству операций чтения и записи на диск.,Это увеличивает накладные расходы ввода-вывода.
  • Высокие издержки ввода-вывода не только снижают производительность Kafka.,Это также может вызвать узкие места дисков и системы.

03 Как работает сжатие сообщений Kafka

Сжатие сообщений Kafka означает сжатие и сохранение самого сообщения с использованием определенного алгоритма сжатия, а затем его распаковку при использовании. Принцип работы сжатия сообщений Kafka будет подробно проанализирован с трех аспектов: процесс сжатия сообщений, выбор алгоритма сжатия и процесс распаковки.

3.1 Процесс сжатия сообщений

Когда производитель отправляет сообщение в Kafka, вы можете выбрать, включать ли сжатие сообщения. Если сжатие включено, Kafka сожмет данные сообщения перед записью сообщения на диск. Процесс сжатия обычно включает в себя следующие этапы:

(1) Выберите алгоритм сжатия: Kafka поддерживает несколько алгоритмов сжатия, включая gzip, snappy, lz4, zstd и т. д. Производители могут выбирать подходящие алгоритмы сжатия в зависимости от сценариев и потребностей приложений.

(2) Сжатие данных сообщения. Производитель принимает данные сообщения, которые будут отправлены, в качестве входных данных и вызывает алгоритм сжатия для выполнения обработки сжатия. Размер сжатых данных будет намного меньше исходного размера данных, что позволит сэкономить место для хранения и пропускную способность сети.

(3) Сохранение сжатых данных: Kafka записывает сжатые данные в соответствующий раздел на диске. Поскольку сжатые данные имеют меньший размер, это экономит место на диске и повышает производительность ввода-вывода.

3.2 Выбор алгоритма сжатия

Kafka поддерживает несколько алгоритмов сжатия, каждый из которых имеет свои характеристики и применимые сценарии. Ниже приводится введение в несколько основных алгоритмов сжатия, поддерживаемых Kafka:

(1) Gzip: Gzip — это распространенный алгоритм сжатия с высокой степенью сжатия. Он подходит для сценариев, требующих высокой степени сжатия, но скорость сжатия и распаковки относительно низкая.

(2) Snappy: Snappy — это быстрый и эффективный алгоритм сжатия, который обеспечивает более быстрое сжатие и распаковку, чем Gzip. Snappy подходит для сценариев, требующих высокой пропускной способности и низкой задержки.

(3) LZ4: LZ4 — это очень быстрый алгоритм сжатия, обеспечивающий более высокие скорости сжатия и распаковки, чем Snappy. LZ4 подходит для сценариев с очень высокими требованиями к производительности.

(4) Zstandard (Zstd): Zstandard — это новый алгоритм сжатия, который обеспечивает более быстрое сжатие и распаковку, чем другие алгоритмы, сохраняя при этом высокую степень сжатия. Zstandard подходит для сценариев, требующих как скорости сжатия, так и производительности.

В практических приложениях производители могут выбирать подходящие алгоритмы сжатия в зависимости от потребностей бизнеса и системной среды. Например, в сценариях, требующих высокой пропускной способности и низкой задержки, вы можете выбрать алгоритм Snappy или LZ4, в сценариях, требующих более высокой степени сжатия, вы можете выбрать алгоритм Gzip или Zstandard;

3.3 Процесс декомпрессии

Когда потребитель извлекает и обрабатывает сообщения из Kafka, Kafka автоматически распаковывает сжатые сообщения. Процесс декомпрессии обычно включает в себя следующие этапы:

(1) Определите тип сжатия. Когда потребитель читает сообщение от Kafka, он сначала определяет тип сжатия сообщения (то есть, какой алгоритм сжатия используется для сжатия).

(2) Распаковка данных сообщения. В зависимости от типа сжатия сообщения потребитель вызывает соответствующий алгоритм распаковки для распаковки данных сообщения. Распакованные данные будут восстановлены до исходных данных сообщения.

(3) Обработка распакованных данных: потребитель обрабатывает распакованные данные сообщения и выполняет соответствующую бизнес-логику.

Следует отметить, что в Kafka процесс сжатия и распаковки сообщений прозрачен для производителей и потребителей. Производителю не нужно заботиться о процессе распаковки сообщения, а потребителю не нужно заботиться о процессе сжатия сообщения. Kafka будет автоматически обрабатывать эти процессы, чтобы обеспечить надежную передачу и эффективную обработку сообщений.

04 Стратегия использования сжатия сообщений Kafka

При использовании функции сжатия сообщений Kafka необходимо обратить внимание на следующие стратегии:

4.1 Выберите подходящий алгоритм сжатия в соответствии с потребностями бизнеса

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

4.2 Управление уровнем сжатия

Kafka позволяет производителям устанавливать уровень сжатия в зависимости от степени сжатия и производительности. Производителям следует выбирать соответствующий уровень сжатия для удовлетворения потребностей бизнеса в зависимости от реальных условий.

4.3 Мониторинг эффектов сжатия

Производителям следует регулярно отслеживать эффекты сжатия и корректировать стратегии сжатия, чтобы обеспечить баланс между производительностью системы и использованием ресурсов. Индикаторы мониторинга могут включать степень сжатия, использование полосы пропускания сети, использование дискового пространства, производительность ввода-вывода и т. д.

4.4 Оценка затрат на декомпрессию

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

4.5 Пакетное сжатие и распаковка

Чтобы уменьшить затраты на сжатие и распаковку, Kafka поддерживает пакетное сжатие и распаковку сообщений. Производители могут упаковывать несколько сообщений в пакет, сжимать их, а затем отправлять в Kafka. Потребители могут выполнить однократную распаковку после получения пакета сообщений. Это может уменьшить количество раз сжатия и распаковки и повысить пропускную способность системы.

4.6 Обратите внимание на порядок и последовательность сообщений

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

4.7 Компромисс между коэффициентами сжатия и репликации

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

4.8 Непрерывная оптимизация и настройка

Функция сжатия сообщений Kafka представляет собой непрерывный процесс оптимизации. По мере развития бизнеса и изменения системной среды для повышения производительности и использования ресурсов может потребоваться корректировка таких параметров, как алгоритм сжатия, уровень сжатия и размер пакета. Поэтому рекомендуется регулярно оценивать и корректировать стратегии сжатия в соответствии с различными бизнес-сценариями и потребностями.

05 Резюме

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

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose