предисловие
Только лысая голова может стать сильнее.
Текст был включен в мой репозиторий GitHub, добро пожаловать, звезда:GitHub.com/Zhongf UC очень…
Две основные статьи были написаны до этой,настоятельно рекомендуетсяСначала прочитайте:
Как мы все знаем, существует несколько видов продуктов для очередей сообщений, и причина, по которой я решил изучить Kafka, заключается в том, что компания использует ее.
Наша компания использует исправленную версию Kafka и очередь сообщений собственной разработки (Kafka и RocketMQ), поэтому я хочу изучить очередь сообщений Kafka. Эта статья представляет собой введение в Kafka, и я надеюсь, что она будет полезна всем.
Предварительно ознакомьтесь с пунктами знаний этой статьи:
Эта статья заняла у меня много времени, чтобы нарисовать картинки, цель - направить вас наиболее доступным способом, если вы думаете, что это хорошо,Надеюсь, вы можете поставить мне лайк!
1. Что такое Кафка?
Во-первых, нам нужно зайти на официальный сайт, чтобы посмотреть, как представлена Кафка:
При сборе данных и изучении я обнаружил, что многие пожилые люди перевели и резюмировали введение официального сайта, поэтому я не буду повторять это здесь, а вставлю адрес, чтобы каждый мог изучить сам:
я писал раньшеНачало работы с очередью сообщенийВ статье также упоминается, что для создания очереди сообщений могут быть рассмотрены следующие вопросы:
- Использование очередей сообщений не может быть одномашинным (должно быть распределенным или кластерным).
- Когда данные записываются в очередь сообщений, может возникнуть проблема потери данных.Данные должны храниться в очереди сообщений.Упорство(Диск? База данных? Redis? Распределенная файловая система?)
- Хотите, чтобы сообщения (данные) были упорядочены, как это сделать?
- Почему данные повторно потребляются в очереди сообщений
Ниже я возьму Кафку в качестве примера, чтобы кратко ответить на эти вопросы, а затем приступить к работе с Кафкой.
1.1 Начало работы с Кафкой
Как мы все знаем, Kafka — это очередь сообщений, и она призвана помещать сообщения в очередь.режиссер, который потребляет из очереди, называетсяпотребитель.
Для промежуточного программного обеспечения сообщений существует не только одна очередь, у нас часто есть несколько очередей, и наши производители и потребители должны знать, в какую очередь поместить данные и из какой очереди отправить сообщение. Нам нужно дать очереди имя, называемоеtopic(аналог базы данныхповерхностьКонцепция чего-либо)
Теперь, когда мы назвали очередь, производитель знает, в какую очередь отбрасывать данные, а потребитель также знает, из какой очереди получать данные. У нас может быть несколько производителей** в одной очереди (теме)Потерянные данные, несколько потребителейПолучить данные из той же очереди (темы)**
Улучшить очередь (тема)пропускная способность, Кафка разделит тему (Partition)
Итак, производитель на самом деле относится к теме с именем partition в Java3y (Partition) теряет данные, потребитель фактически переходит к разделу с именем Java3y (Partition) чтобы получить данные
Сервер Kafka называетсяBroker, кластер Kafka состоит из нескольких серверов Kafka:
Тема будет разделена на несколько разделов, фактически раздел будетраспределенныйУ разных брокеров, например:
Отсюда мы знаем:Кафка естественно распространяется.
Если вы не понимаете распределенных/кластерных и основных распределенных концепций, вы можете подписаться на мой GitHub:GitHub.com/Zhongf UC очень…
Ключевые слова: распределенный, SpringCloud Гарантировано, чтобы вы поняли. Если вы думаете, что я написал хорошо, дайте мне этопоставить лайк!
Теперь мы знаем, что данные закидываются в тему, по факту данные будут разбиты на разные партиции, и эти партиции будут существовать на разных брокерах. Распределенная обязательно принесет проблемы: «А что, если у одного из брокеров (сервера Kafka) будет джиттер сети или она зависнет?»
Вот что делает Kafka: наши данные находятся в разных разделах, тогда kafka будет делать эти разделырезервный. Например, теперь у нас есть три раздела, которые хранятся на трех брокерах соответственно. Каждый раздел резервируется, и эти резервные копии разбросаны поразныена брокера.
Раздел красного блока представляет собойхозяинРаздел, фиолетовый блок раздела представляетрезервныйраздел. Производитель теряет данные в тему, что аналогичнохозяинВзаимодействие с разделом, потребители потребляют данные темы, но также взаимодействуют с основным разделом.
Резервный раздел используется только для резервного копирования и не читает и не записывает.Если брокер выходит из строя, раздел других брокеров будет выбран в качестве основного раздела, что достигаетсяВысокая доступность.
Так же стоит упомянуть, что когда производитель закидывает данные в тему, мы знаем, что они записаны на раздел, как раздел их сохраняет? (Без настойчивости, если Брокер зависнет на полпути, он точно потеряет данные).
Kafka записывает данные раздела вдиск(журнал сообщений), но Kafka позволяет толькодобавить написать(последовательный доступ), избегая медленных случайных операций ввода-вывода.
- Kafka не записывает данные на диск, как только в разделе есть данные, он сначалатайникЧасть из них, ждать, пока не будет достаточно данных или ждать определенный период времени, чтобы записать в пакетах (flush).
Вышеприведенная балабала говорит о том, как производитель забрасывает данные в топик, а следующая — как их потребляет потребитель. Так как данные хранятся в разделе, тоПотребитель фактически тоже взят из разделаданные.
Может быть несколько производителей и несколько потребителей. Как и в случае выше, потребитель потребляет данные из трех разделов. Несколько потребителей могут образовать одингруппа потребителей.
Первоначально потребитель использует три раздела. Теперь, когда у нас есть группа потребителей, мы можемКаждый потребитель потребляет раздел(также для повышения пропускной способности)
В соответствии с ситуацией, показанной на рисунке, я хочу объяснить следующее:
- Если зависает потребитель в группе потребителей, то один из потребителей может потреблять два раздела.
- Если разделов всего три, а в группе потребителей 4 потребителя, то один потребитель будет простаивать
- Если вы добавите еще одингруппа потребителей, будь то новая группа потребителей или исходная группа потребителей, можно использовать все данные темы. (между группами потребителей логически онинезависимыйиз)
Ранее было объяснено, что данные, потерянные производителем в теме, хранятся в разделе, а раздел сохраняется на диске, и доступ к ним осуществляется последовательно посредством ввода-вывода, сначала записываются в кеш, а затем записываются на диск в партии через определенный период времени или когда объем данных достаточно велик.
Потребители также очень внимательно относятся к чтению: обычное чтение данных с диска требует копирования данных состояния ядра в состояние пользователя, а Kafka вызываетsendfile()
Непосредственно из пространства ядра (DMA) в пространство ядра (Socket),одной копией меньшеоперация.
У некоторых учащихся могут возникнуть вопросы: Как потребители узнают, где они потребляют? Кафка не поддерживаетсяотступление? Как это делается?
- Например, как упоминалось выше: если потребитель в группе потребителей умирает, раздел, потребляемый приостановленным потребителем, может быть использован выжившим потребителем. ТотВыжившие потребители должны знать, где потребляют потребители, которые кладут трубку., иначе как играть.
здесь, чтобы выявитьoffset
Теперь Кафка используетсяoffset
Чтобы указать, где находится прогресс потребления потребителя, у каждого потребителя будет свой собственныйoffset
. если быть честнымoffset
означает потребительПрогресс потребления.
В предыдущих версиях Kafka этоoffset
Управляется Zookeeper, позже разработчики Kafka посчитали, что Zookeeper не подходит для большого количества операций удаления и модификации, поэтому поставилиoffset
В брокере с внутренней темой (__consumer_offsets
), чтобы сохранить его.
Это будет отправлено каждый раз, когда потребитель потребляетoffset
, Kafka позволяет вам выбрать, следует ли фиксировать автоматически или вручную.
Теперь, когда упоминается Zookeeper, скажем еще кое-что. Хотя Zookeeper не используется для сохранения клиентов в новой версии Kafkaoffset
, но Zookeeper является важной зависимостью Kafka.
- Обнаруживает добавление или удаление брокеров и потребителей.
- Отвечает за поддержание отношения ведущий/подчиненный (основной раздел и резервный раздел) всех разделов.Если основной раздел выходит из строя, резервный раздел должен быть выбран в качестве основного раздела.
- Сохранение информации метаконфигурации, такой как тема и раздел
- ....
Наконец
Учебник по сборке, начиная с 0 и шаг за шагом 😂
Предполагается, что благодаря этой статье вопросы в начале статьи более или менее понятны. Коротко отвечу:
Использование очередей сообщений не может быть одномашинным (должно быть распределенным или кластерным).
Kafka распределяется естественным образом: потеря данных в топике фактически означает хранение данных в разделах нескольких брокеров.
Когда данные записываются в очередь сообщений, может возникнуть проблема потери данных.Данные должны храниться в очереди сообщений.Упорство(Диск? База данных? Redis? Распределенная файловая система?)
Kafka будет хранить разделы в виде журналов сообщений (на диске) и увеличивать скорость за счет последовательного доступа к операциям ввода-вывода и кешу (ожидая определенного количества или времени) для фактической записи данных на диск.
Хотите, чтобы сообщения (данные) были упорядочены, как это сделать?
Kafka будет записывать данные в раздел, и запись одного раздела будет последовательной. Если вы хотите обеспечить глобальный порядок, его можно записать только в один раздел. Если вы хотите потреблять упорядоченно, может быть только один потребитель.
Почему данные повторно потребляются в очереди сообщений
Любой распределенный метод не может избежать таких проблем, как дрожание сети/простой машины.Вполне вероятно, что потребитель А прочитал данные и зависает, прежде чем они успевают их использовать. Zookeeper обнаруживает, что потребитель A не работает, и просит потребителя B использовать исходный раздел потребителя A. Когда потребитель A повторно подключается, он обнаруживает, что одни и те же данные использовались повторно. (Возможны различные ситуации, тайм-ауты потребителей и т.д....)
Если бизнес не допускает повторного потребления, лучше всего провести проверку бизнеса на стороне потребителя (если он был потреблен, он не будет потреблен)
Эта статья в основном представляет собой введение в Кафку, Кафка также затрагивает другие концепции и другие вещи. На мой взгляд, многие вопросы на собеседовании связаны с конфигурацией, поэтому при решении некоторых задач,Посмотрим, можно ли это решить с существующей конфигурацией.(Если вы узнаете больше о фреймворке, вы обнаружите, что многие официальные решения уже поддерживают это решение, и вы можете изменить конфигурацию/параметры, и все будет готово).
Эта книга была включена в мои избранные статьи на GitHub, добро пожаловать, звезда:GitHub.com/Zhongf UC очень…
рад вывестигалантерейные товарыОбщедоступный номер технологии Java:Java3y. В публичном аккаунтеБолее 300 оригинальных статейТехнические статьи, обширные видеоресурсы, красивые карты мозга,Следуйте, чтобы получить его!
Большое спасиботалантМы можем видеть здесь, если эта статья хорошо написана, я чувствую себя "три криво"что-тоеслипопросить лайк Пожалуйста, следите за ️ поделитесь пожалуйста 👥 Спросите сообщение 💬Это правда для меняочень полезно! ! !
Творить не легко Ваша поддержка и признание - самая большая мотивация для моего творчества Увидимся в следующей статье!