Имя автора:От лета до холода
Об авторе: Сосредоточьтесь на Java и больших данных, стремимся исследовать границы технологий и делиться передовыми практиками и идеями.
Колонка статей: Колонка Ся Чжиихань-Кафка
Введение в колонку. Целью этой колонки является представление основных концепций, основных компонентов и сценариев использования Kafka в простой для понимания форме, а также пошаговое создание системы знаний об очередях сообщений и потоковой обработке, независимо от того, заинтересованы ли вы в распределенных системы или подготовка к работе с ними. Делая первый шаг в области больших данных, в этой статье представлены все необходимые ресурсы и рекомендации. Подпишитесь бесплатно прямо сейчас и начните свой путь обучения Kafka!
Стратегия разделения Kafka: алгоритмическая мощь, стоящая за высокой пропускной способностью
Предисловие
- представлять Основные понятия секционирования Кафка, Принцип, подробно объясняющий различные разделы (например, разделы диапазонов, липкие разделы, саморазделы и т. д.) работы, отличный недостаток и сценарии применения.
- Обсудите, как повысить производительность кластера Kafka с помощью стратегии оптимизации секционирования, в том числе о том, как выбрать подходящий раздел, как избежать перекоса разделов и т. д.
- Обсудить стратегию разделения и балансировку Kafka нагрузки, проанализировать, как достичь балансировки между потребителями посредством разумных стратегий разделения. нагрузку, улучшить общую производительность кластера.
01 Основные понятия о секционировании Kafka
1.1 Концепция раздела
- Раздел — это физическая единица хранения Kafka Topic, используемая для хранения последовательностей сообщений.
- Каждая тема может содержать несколько разделов, и эти разделы могут храниться и реплицироваться на разных брокерах.
- Сообщения в Kafka хранятся в разделах, и сообщения в каждом разделе упорядочены.
- Тема может иметь несколько разделов, и каждый раздел может принадлежать только одной теме.
- Когда сообщение отправляется в тему, оно фактически отправляется в один или несколько разделов темы.
1.2 Роль перегородок
- Повышение пропускной способности: улучшите пропускную способность Kafka за счет одновременной обработки нескольких разделов.
- балансировка нагрузки: Распределяйте сообщения по нескольким разделам и брокерам, чтобы избежать единых точек отказа.
- Порядок сообщений: Kafka гарантирует, что сообщения в каждом разделе упорядочены.
02 Алгоритм разделения Kafka по умолчанию
2.1 Определение
Алгоритм секционирования Kafka по умолчанию, DefaultPartitioner, — это стратегия по умолчанию, используемая производителями Kafka при отправке сообщений в разные разделы. Этот алгоритм главным образом определяет, в какой раздел следует отправить сообщение, на основе ключа сообщения и количества разделов темы.
2.2 Принцип работы
Принцип работы алгоритма секционирования Kafka по умолчанию в основном основан на следующих двух аспектах:
- Проверка наличия ключа:Когда производитель отправляет сообщениеKafkaчас,Сначала он проверит, содержит ли сообщение ключ. Если сообщение содержит ключ,Кафка войдет в Логику разделения на основе ключи. Если ключ не указан в сообщении, Kafka будет использовать метод опроса выделения; раздел。
- Логика разделения на основе ключей:Если сообщение содержитkey,Kafka хеширует ключ (обычно используя MurmurHashалгоритм).,Получите хэш-значение. Затем,KafkaЭто значение хеш-функции будет рассчитываться по модулю количества разделов темы.(
hash(key) % numPartitions
),Полученный результат является индексом целевого раздела. так,Сообщения с одинаковым ключом будут отправлены в один и тот же раздел.,Тем самым реализуя местный порядок сообщения.
2.3 Преимущества и недостатки
преимущество:
- Простой и удобный в использовании:Раздел по умолчаниюалгоритмясная логика,Легко понять и реализовать,Никакой сложной настройки или написания дополнительного кода не требуется.
- балансировка нагрузки:когдаkeyРавномерно распределеночас,Используемый по умолчанию алгоритм разделения обеспечивает хорошую балансировку нагрузки.,делая каждый Объем данных в разделеотносительно сбалансированный。
- местный порядок:иметь то же самоеkeyсообщения будут отправляться в тот же раздел,гарантироватьместный порядок, это очень важно в определенных сценариях, где необходимо гарантировать порядок сообщений.
недостаток:
- Проблема неравномерного распределения ключей:когдаkeyиз Неравномерное распределениечас,Это может привести к тому, что объем данных некоторых разделов будет слишком большим.,При этом влияя на производительность. Например,Если клавиша появляется чаще, чем другие клавиши,Тогда сообщение, содержащее этот ключ, будет отправлено в тот же раздел.,Вызывает слишком высокую нагрузку на этот раздел.
- Глобальный порядок не может быть гарантирован.:потому что Раздел по умолчаниюалгоритмоснован наkeyХэш-значение разделено,Поэтому нет никакой гарантии, что сообщения с одним и тем же ключом будут отправлены в один и тот же раздел. Это означает, что в глобальном масштабе,Kafka не может гарантировать порядок сообщений.
2.4 Стратегия оптимизации
- Оптимизация дизайна клавиш:попытаться обеспечитьkeyравномерное распределение,Избегайте частого появления определенных ключей, вызывающих чрезмерную нагрузку на определенные разделы. Вы можете снизить частоту конфликтов ключей, предварительно обработав ключ, используя случайные числа или UUID и т. д.
- Отрегулируйте количество разделов:В зависимости от загрузки системы ипроизводительность Требовать,Соответствующее Отрегулируйте количество разделов. Слишком большое количество разделов может привести к пустой трате ресурсов и увеличению сложности управления.,Слишком малое количество разделов может привести к снижению производительности. Соответствующее количество разделов необходимо выбирать в зависимости от реальной ситуации.
- Рассмотрите возможность использования собственного алгоритма секционирования.:если Раздел по умолчаниюалгоритм Невозможно удовлетворить потребности бизнеса,Рассмотрите возможность реализации алгоритма саморазбиения. Метод саморазбиения может реализовать различную сложную логику разделения в соответствии с потребностями бизнеса.,Для удовлетворения конкретной производительности или функциональных требований.
03 Алгоритм разделения опроса Kafka
3.1 Определение
RoundRobinAssignor Kafka — это стратегия распределения разделов внутри групп потребителей. Его основная цель — как можно более равномерно распределить разделы между потребителями в группе потребителей для достижения балансировки нагрузки.
3.2 Принцип работы
Принцип работы алгоритма циклического разделения относительно прост и понятен:
- Потребители и сортировка разделов:первый,Kafka отсортирует разделы всех потребителей в группе потребителей и всех тем, на которые подписан потребитель. Сортировка обычно основана на имени или идентификаторе потребителя и раздела.
- Распределение по круговому принципу:Затем,Kafka распределяет разделы между отсортированными потребителями один за другим методом опроса. Если потребители подписываются на разное количество разделов,Тогда некоторым потребителям могут быть выделены дополнительные разделы.
- Распределите равномерно:Разделы опросаалгоритм Цель состоит в том, чтобы гарантировать, что все потребители получают одинаковое количество разделов, когда это возможно.,Таким образом реализовывая балансировку нагрузки.
3.3 Преимущества и недостатки
преимущество:
- балансировка нагрузки:Разделы опросаалгоритм Возможность гарантировать, что каждый потребитель в группе потребителей получает одинаковое количество разделов, когда это возможно.,Таким образом реализовывая балансировку нагрузки.
- Просто и эффективно:Долженалгоритм Реализация относительно проста,Высокая вычислительная эффективность,Подходит для крупномасштабных распределенных систем.
недостаток:
- Невозможно справиться с перекосом раздела:Если в теме гораздо больше разделов, чем в других темах,Или вычислительная мощность одного потребителя намного больше, чем у других потребителей.,Тогда опрос алгоритма раздела может оказаться не в состоянии эффективно справиться с этой ситуацией перекоса раздела.
- Может вызвать неравномерную нагрузку на потребителей:в некоторых случаях,Если потребители имеют разные возможности обработки,Или потребитель не может вовремя обработать назначенный ему раздел по каким-либо причинам (например, задержка в сети, сбой оборудования и т. д.).,Так Разделы опросаалгоритм Может вызвать неравномерную нагрузку на потребителей。
3.4 Стратегия оптимизации
Чтобы устранить недостатки алгоритма разделения по опросу, можно использовать следующие стратегии оптимизации:
- Динамическая настройка распределения разделов:KafkaМожет пересчитываться периодически или в зависимости от определенных условий ивыделить раздел, чтобы учесть изменения вычислительной мощности потребителя или увеличение или уменьшение количества разделов. Это можно сделать с помощью перераспределения Кафки. механизм достижения раздела.
- Используйте собственную стратегию распределения разделов.:если Разделы опросаалгоритм Невозможно удовлетворить конкретные потребности бизнеса,Вы можете рассмотреть возможность использования внешнего источника распределения разделов.. Стратегия самостоятельного распределения может реализовать различную сложную логику разделения в соответствии с потребностями бизнеса.,Для удовлетворения конкретной производительности или функциональных требований.
- Мониторинг и оповещение:путем мониторингаKafkaСтатус кластера и потребителяпроизводительностьиндекс,Своевременно выявляйте и устраняйте потенциальные проблемы с дисбалансом нагрузки. Например,Может отслеживать задержку обработки потребителя, пропускную способность и другие показатели.,А при необходимости подается сигнал тревоги, уведомляющий администратора о необходимости вмешательства.
04 Алгоритм разделения диапазона Кафки
4.1 Определение
Алгоритм разделения диапазона Kafka (RangeAssignor) — это стратегия распределения разделов внутри группы потребителей. Его основная цель — как можно более равномерно распределить разделы между каждым потребителем в группе потребителей посредством разделения диапазонов на основе количества потребителей и количества тематических разделов в группе потребителей.
4.2 Принцип работы
Алгоритм разделения диапазона работает следующим образом:
- Потребительская сортировка:по каждой теме,Стратегия RangeAssignor отсортирует всех потребителей, подписавшихся на эту тему, в группе потребителей в лексикографическом порядке по имени.
- Рассчитать размер раздела:RangeAssignorСтратегия разделит общее количество потребителей и общее количество разделов для получения промежутка.(Прямо сейчаскаждый Потребители должны Долженполучатьиз Разделколичество)。
- выделить раздел:Затем,Стратегия RangeAssignor делит фиксированный диапазон разделов для каждого потребителя. Конкретно,Он начнется с первого раздела,По пролету для каждого потребителя выделяют раздел, пока все разделы не будут выделены.
- Обработка остатков:Если общее количество разделов не делится на общее количество потребителей,То есть есть остаток,Тогда потребителю с наивысшим лексикографическим порядком будет выделен еще один раздел.,чтобы убедиться, что все разделы выделены.
4.3 Преимущества и недостатки
преимущество:
- Простой и интуитивно понятный:раздел диапазонаалгоритмреализация Простой и интуитивно понятный,Легко понять и реализовать。
- балансировка в определенной степени нагрузки:Когда количество потребителей и количество разделов относительно сбалансированы,Метод разделения диапазона позволяет достичь определенной степени балансировки нагрузки.
недостаток:
- Может вызвать неравномерную нагрузку:когда消费者количество与Разделколичество不平衡,или когда существует большая разница в вычислительной мощности между потребителями,Разделение диапазона может привести к перегрузке некоторых потребителей.,В то время как другие потребители относительно простаивают,Это вызывает проблему неравномерной загрузки.
- Чувствительность к присоединению и уходу потребителей:когда Что-то новоеиз Потребители присоединяютсяили Существующие потребители уходятчас,раздел диапазонаалгоритм Нужно повторно Рассчитать размер разделаи сновавыделить раздел,Это может привести к обширной миграции разделов и повторному копированию данных.,Тем самым влияя на производительность и стабильность системы.
4.4 Стратегия оптимизации
Чтобы устранить недостатки алгоритма разделения диапазона, можно принять следующие стратегии оптимизации:
- Пользовательская стратегия разделения:В соответствии с конкретными бизнес-сценариями и потребностями,Может Пользовательская стратегия разделения。Например,Разделы можно выбирать по ключу сообщения.,чтобы гарантировать, что связанные сообщения записываются в один и тот же раздел,Тем самым сохраняется локальность данных и уменьшается дисбаланс разделов.
- Перераспределение раздела:Регулярный осмотр Объем данных в разделе,Если обнаружен дисбаланс,Может Рассмотрите возможность повторноговыделить раздел. Это может быть ручной процесс или автоматизированный с помощью инструментов. повторно выделить раздел может обеспечить балансировку системы нагрузкии улучшитьпроизводительность。
- Увеличение или уменьшение количества потребителей:В зависимости от загрузки системы,Может динамически увеличивать или уменьшать количество потребляемых товаров. Когда нагрузка на систему высока,Количество потребителей может быть увеличено для увеличения вычислительной мощности при низкой загрузке системы;,Число потребителей может быть уменьшено для экономии ресурсов.
05 Алгоритм липкого разделения Кафки
5.1 Определение
Алгоритм липкого разделения Kafka (StickyAssignor) — это стратегия распределения разделов внутри группы потребителей. Его основная особенность заключается в том, что при перераспределении разделов он максимально сохраняет результаты последнего распределения разделов, уменьшает ненужную миграцию разделов и копирование данных, а также повышает стабильность и производительность системы.
5.2 Принцип работы
Принцип работы алгоритма липкого секционирования можно резюмировать следующим образом:
- Рассмотрим последний результат распределения:Создание новыхиз Разделраспространятьчас,При липком секционировании учитываются результаты последнего распределения. Если количество потребителей или тематических разделов в группе потребителей меняется,алгоритм попытается сохранить исходные результаты выделения разделов неизменными.
- сбалансированное распределение:На основе сохранения исходных результатов распределения,При липком разделении будет предпринята попытка добиться сбалансированного распределения разделов. Если потребителю необходимо Отрегулировать количество разделово в сторону увеличения или уменьшения., алгоритм попытается выделить увеличенные или уменьшенные разделы другим потребителям для поддержания общей балансировки нагрузки。
- Уменьшить миграцию разделов:липкий разделалгоритмв ревыделить разделчас,Миграция разделов будет сведена к минимуму. Это означает, что при изменении количества потребителей или количества разделов,Необходимо перенести только несколько разделов,Это снижает накладные расходы на копирование данных и передачу по сети.
5.3 Преимущества и недостатки
преимущество:
- Улучшение стабильности системы:потому чтолипкий разделалгоритмв ревыделить разделчас Постараюсь оставить все как естьизраспространять结果,Таким образом, можно сократить ненужную миграцию разделов и копирование данных.,Это повышает стабильность системы.
- Уменьшите нагрузку на сеть:потому чтоуменьшенный Разделиз Миграция и репликация данных,Это также снижает накладные расходы на передачу по сети.,Улучшена производительность системы.
недостаток:
- Возможно, это не оптимальное решение:в некоторых случаях,Алгоритм липкого разделения может не найти оптимальную схему распределения разделов. Например,Когда существует серьезное несоответствие между количеством потребителей и количеством разделов.,алгоритм может не достичь истинной балансировки нагрузки.
- Чувствительность к изменениям количества потребителей:когда消费者количество发生变化час,Липкие разделы требуют перерасчета схемы размещения разделов. Если количество потребителей часто меняется,Может привести к обширной миграции разделов и копированию данных.,Тем самым влияя на производительность и стабильность системы.
5.4 Стратегия оптимизации
Чтобы устранить недостатки алгоритма липкого разделения, можно использовать следующие стратегии оптимизации:
- Ограничить изменения количества потребителей:Старайтесь часто избегать Увеличение или уменьшение количества потребителей,к Уменьшить миграцию разделов и накладные расходы на репликацию данных.
- Используйте другие стратегии распределения разделов:еслилипкий разделалгоритм Невозможно удовлетворить конкретные потребности бизнесаилипроизводительность Требовать,Можетучитывать Используйте другие стратегии распределения разделов,нравитьсяраздел диапазонаалгоритмили Пользовательская стратегия разделения。
- Контролируйте и корректируйте:путем мониторингаKafkaСтатус кластера и потребителяпроизводительностьиндекс,Своевременно выявляйте и устраняйте потенциальные проблемы с дисбалансом нагрузки. когда необходимо,Вы можете вручную настроить схему распределения разделов или количество потребителей для достижения лучших результатов.
06 Пользовательский алгоритм разделения Kafka
6.1 Определение
Алгоритм настраиваемого раздела Kafka (Custom Partition Assignor) позволяет пользователям реализовать определенную логику распределения разделов на основе их собственных бизнес-потребностей и характеристик данных. Этот алгоритм не предоставляется Kafka по умолчанию, но требует от пользователей написания собственного кода для его реализации.
6.2 Принцип работы
Принцип работы пользовательского алгоритма секционирования зависит от конкретной логики реализации, но обычно включает в себя следующие шаги:
- Собрать информацию:алгоритмпервыйсоберу и Разделраспространять相关изинформация,Например, количество потребителей в группе потребителей、Темы и разделы, на которые подписывается каждый потребитель、каждый Объем данных в раздележдать。
- Рассчитать план распределения:На основании собранной информации,алгоритм рассчитает план распределения разделов. Этот план может основываться на различных факторах.,Например, потребительская вычислительная мощность, Объем данных в разделе、Бизнес-логика данных и т. д.
- Выполнить распределение:наконец,алгоритм применит рассчитанный план распределения разделов к кластеру Kafka,То есть назначьте конкретный раздел конкретному потребителю.
6.3 Преимущества и недостатки
преимущество:
- Высокая гибкость:сопределение Разделалгоритм Может Согласно конкретнымиз Настраивается в соответствии с потребностями бизнеса и характеристиками данных,Реализуйте очень гибкую логику распределения разделов.
- Оптимизация производительности:посредством разумногоиз Разделраспространять,МожетоптимизацияKafkaсгруппированныйпроизводительность,Например, улучшение пропускной способности, уменьшение задержки и т. д.
- удовлетворить конкретные потребности:Для некоторых конкретных бизнес-потребностей,Если необходимо разделить данные в соответствии с бизнес-логикой данных,,Метод саморазбиения может очень хорошо удовлетворить эти потребности.
недостаток:
- Комплекс внедрения:сопределение Разделалгоритмнужен пользовательсстроки кода для реализации,Относительно стратегии распределения разделов, предоставляемой Kafka по умолчанию.,Это сложнее реализовать.
- Высокие затраты на техническое обслуживание:потому чтосопределение Разделалгоритмиз Реализуйте логику Более сложный,Поэтому в последующий процесс обслуживания и обновления необходимо вкладывать больше времени и энергии.
- Плохая мобильность:потому чтосопределение Разделалгоритмпользовательсреализация линиииз,Поэтому его мобильность относительно плохая. Если вам нужно перенести кластер Kafka в другие среды или версии,Может возникнуть необходимость переписать или изменить код алгоритма определения раздела.
6.4 Стратегия оптимизации
Чтобы устранить недостатки пользовательских алгоритмов секционирования, можно использовать следующие стратегии оптимизации:
- Упрощение логики реализации:Попробуйте упроститьсопределение Разделалгоритмиз Реализуйте логику,Уменьшите ненужную сложность и избыточный код. Это помогает улучшить читаемость и удобство сопровождения кода.
- Модульная конструкция:Волясопределение Разделалгоритмиз Код для продолжения Модульная конструкция,Разделите различные функции на независимые модули. Это помогает уменьшить связанность кода.,Улучшите возможность повторного использования и сопровождения кода.
- Документация:длясопределение Разделалгоритм Напишите подробноиздокумент,Включая идеи дизайна алгоритма, логику реализации, конфигурацию параметров и т. д. Это помогает другим разработчикам понять и использовать алгоритм саморазбиения.,Сократите затраты на техническое обслуживание.
- Непрерывный мониторинг и настройка:в приложениисопределение Разделалгоритмназад,Необходимость постоянного мониторинга производительности и стабильности кластера Kafka.,И вносить коррективы в соответствии с реальной ситуацией. Это помогает гарантировать, что алгоритм с саморазделением сможет продолжать удовлетворять потребности бизнеса и оптимизировать производительность кластера.