Как Kafka поддерживает миллионы TPS? Ответ скрыт в этих 10 картинках

Java

эта статьяgithub/JavaMapОн был включен, есть карта расширенных технических знаний Java-программистов и моя серия статей, добро пожаловать в Star.

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

В отрасли у нас есть много зрелого промежуточного программного обеспечения для обмена сообщениями, такого как: RabbitMQ, RocketMQ, ActiveMQ, ZeroMQ. Почему Kafka у многих конкурентов все еще может иметь место, конечно, зависит от его высокой пропускной способности. Ниже вы попадете в Secret.

Как Kafka поддерживает миллионы TPS?

Во-первых, используйте интеллект-карту, чтобы прямо сказать вам ответ:

Kafka支持百万TPS的秘密
Секрет Кафки по поддержке миллионов TPS

Последовательное чтение и запись диска

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

顺序写 VS 随机写
Последовательная запись VS случайная запись

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

Поэтому неудивительно, что Kafka выбирает последовательное чтение и запись на диск.

Далее в качестве примера используется традиционный механический диск, чтобы подробно представить, что такое последовательное чтение и запись и случайное чтение и запись.

блюдоИ ** поверхность диска: ** жесткий диск обычно имеет несколько пластин, и пластина разделена на верхнюю и нижнюю стороны, из которых эффективная сторона называется поверхностью диска, которая обычно действительна вверх и вниз, то есть :Количество дисков = количество дисков * 2.

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

传统机械磁盘
традиционный механический диск

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

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

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

单盘示意图
Схема одного диска

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

Имея базовые знания о дисках, мы можем легко понять последовательное чтение и запись и случайное чтение и запись.

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

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

Хорошо, давайте вернемся к кафке, детализируйте, как KAFKA реализует последовательные данные для чтения.

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

顺序写
писать последовательно

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

顺序读
последовательное чтение

Memory Mapped Files(MMAP)

В начале статьи мы видели, что скорость последовательного чтения и записи жесткого диска в основном сравнима со скоростью произвольного чтения и записи памяти, но все же слишком медленная по сравнению с последовательным чтением и записью памяти. Что, если Kafka захочет еще больше повысить эффективность? Современное хранилище подкачки операционной системы может использоваться для полного использования памяти для повышения эффективности ввода-вывода, что также является методом MMAP, описанным ниже.

MMAPэтофайл с отображением памяти, в 64-разрядной операционной системе он обычно может представлять файл данных 20G.Его принцип работы заключается в непосредственном использовании страницы операционной системы для реализации прямого сопоставления файла с физической памятью.После завершения сопоставления операция физической памяти будет синхронизирована с жестким диском.

MMAP原理
Принцип ММАП

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

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

Kafka предоставляет параметр: product.type для управления активным сбросом.Если Kafka записывает в MMAP, он сразу же сбрасывает и затем возвращается в Producer, который называется синхронным (синхронным); после записи в MMAP немедленно возвращается в Producer без вызова flush называется асинхронным (async). ).

Нулевая копия

Еще одна черная технология Кафки — использование нулевого копирования.Чтобы глубоко понять нулевое копирование, вы должны знать, что такое DMA.

Что такое ДМА?

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

Вообще говоря, операции ввода-вывода выполняются ЦП, а затем ждут, пока устройство ввода-вывода завершит операцию и вернется, тогда ЦП потратит много времени на ожидание операции ввода-вывода.

Но во многих случаях ЦП не оказывает практического значения слишком много, мы фактически просто поместили большое количество операций передачи для устройств ввода / вывода в память только внутри устройств ввода / вывода данных. Такие, как большая копия файлов, если все данные проходят через процессор, это своего рода пустая трата времени.

Исходя из этого, существует технология DMA, которая транслируется в прямой доступ к памяти, что позволяет сократить время ожидания ЦП.

Принцип нулевого копирования Кафки

Если технология нулевого копирования не используется, потребитель (consumer) потребляет данные от Kafka, Kafka считывает данные с диска и отправляет в сеть, а всего данные передаются четыре раза. Две из них — передачи DMA, а две другие — передачи, управляемые ЦП.

四次传输过程
Процесс передачи четыре

первая передача: Чтение данных с жесткого диска в буфер ядра операционной системы, эта передача осуществляется по прямому доступу к памяти.

вторая передача: Копирует данные из буфера ядра в выделенную память.Эта передача осуществляется ЦП.

третья передача: Запись из выделенной памяти в буфер сокетов операционной системы.Эта передача осуществляется ЦП.

четвертая передача: Запись из буфера сокета в буфер сетевой карты.Эта передача осуществляется по DMA.

На самом деле в kafka выполняется только две передачи данных, как показано ниже:

两次传输,零拷贝技术
Две передачи, технология нулевого копирования

первая передача: Прямое чтение с жесткого диска в буфер чтения ядра операционной системы через DMA.

вторая передача: Согласно дескрипторной информации Сокета, он напрямую записывается из буфера чтения в буфер сетевой карты.

Мы видим, что количество передач одних и тех же данных изменилось с четырех до двух, и передачи данных через ЦП нет, все данные передаются через DMA. Копирования (Copy) данных на уровне памяти нет, этот метод называетсяНулевое копирование.

Независимо от размера количества передачи данных, передача одних и тех же данных с использованием нулевой копии может быть сокращена до 65% времени, значительно усиливает пропускную способность передачи данных машины, которая способна поддержать кафка для миллионов TPS является важной причиной.

Пакетные данные (обработка партии данных)

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

Kafka сохраняет все сообщения в файлах одно за другим, и когда потребителям нужны данные, Kafka отправляет файлы непосредственно потребителям. Например, 1 миллион сообщений в файле может быть 10 М данных.Если сеть между потребителями и Kafka хорошая, 10 МБ могут быть отправлены примерно за 1 секунду, то есть 1 миллион TPS, Kafka обрабатывает 100 000 сообщений в секунду информации.

Увидев это, у вас могут возникнуть сомнения: потребителю нужно только одно сообщение, Кафка отправил весь файл, а что с остальными сообщениями в файле? Не забывайте, что потребители могут записывать прогресс потребления посредством смещения.

Еще одним преимуществом отправки файлов является то, что файлы можно сжимать партиями, чтобы уменьшить потери при сетевом вводе-выводе.

Суммировать

Наконец, давайте суммируем секрет поддержки Kafka миллионов TPS:

(1) Записывайте данные последовательно и добавляйте их в конец раздела, чтобы скорость была оптимальной.

(2) Используя технологию MMAP для сопоставления дисковых файлов с памятью, Kafka может работать с памятью как с дисками.

(3) Нулевое копирование достигается за счет технологии прямого доступа к памяти, что снижает количество передач данных.

(4) При чтении данных используйте sendfile для прямого принудительного вывода, а пакетное сжатие превращает все сообщения в пакетный файл, что разумно снижает потери сетевого ввода-вывода.

-- END --

Ежедневная дерзкая просьба о лайках: Здравствуйте техники, сначала поставьте лайк, а потом посмотрите, чтобы выработалась привычка, ваши лайки очень важны для меня.

Об авторе:

☕Я читаю книги уже несколько лет: окончил Хуачжунский университет науки и технологий со степенью магистра;

😂 Проехал мимо нескольких крупных заводов: Huawei, NetEase, Baidu...

😘 Я всегда верил, что технологии могут изменить жизнь, я готов сохранить первоначальный замысел и давай техников!

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

Статья постоянно обновляется вgithub/JavaMapВы можете увидеть мою заархивированную серию статей в , с опытом интервью и техническими галантерейными товарами, добро пожаловать в Star.