Kafka — это платформа обработки потоков с открытым исходным кодом, управляемая Apache Foundation (официальный сайт).kafka.apache.org/), но большинство людей в Китае в основном знают его какочередь сообщений, так что давайте сначала разберемся, что такоеочередь сообщений.
очередь сообщений
Очередь сообщений, как следует из ее названия, представляет собой очередь для хранения сообщений.режиссерПомещайте сообщения в очередь сообщений, и **потребитель** читает содержимое очереди сообщений. Каждое сообщение в очереди сообщений будет иметь позицию, похожую на индекс в массиве, который мы называем смещением в kafka. Для производителей действует специальный зачет -LEO(log end offset), который указывает на следующее место в очереди сообщений, где будет храниться сообщение.
Сосредоточьтесь здесьпотребитель, очередь сообщений, конечно, может быть прочитана несколькими потребителями, и каждый потребитель имеет уникальныйgroup-idдифференцировать его. Kafka также будет записывать, какую позицию (смещение) прочитал каждый потребитель (consumer).
В: Почему смещение, потребляемое потребителем, записывается Kafka, а не самим потребителем?
Тема
Выше мы взяли фрагмент данных в качестве примера, чтобы рассказать о том, что такое очередь сообщений. Что делать, если имеется несколько копий данных (несколько очередей)? Это тоже очень просто: в kafka мы можем использовать разные **топики (Topic)** для различения разных данных. Разные производители (producers) могут хранить данные в разных топиках, и разные консьюмеры (consumers) также могут читать данные из разных топиков.
Раздел
Что делать, если часть данных очень велика? Конечно считайрасколоть. В kafka вы можете настроить разделение темы (Topic) на несколько разных разделов (Partation), а затем управлять, создавать и потреблять данные в измерении раздела (Partation). Наиболее очевидным преимуществом разделения является улучшениеПропускная способность, несколько разделов (Partation) работают параллельно, не мешая друг другу. Что касается того, как разделить, Kafka предоставляет несколько стратегий разделения по умолчанию, таких как опрос, случайный выбор и хеширование.Конечно, вы можете реализовать свою собственную стратегию разделения, поэтому я не буду слишком подробно ее здесь расширять.
Потребительская группа
После того, как тема разделена, как ее потребляет потребитель? Здесь мы должны упомянуть о понятии группы потребителей (Consumer-group),В kafka для обеспечения согласованности данных один и тот же раздел (Partation) может одновременно использоваться только одним экземпляром потребителя (потребителя)., чтобы повысить пропускную способность потребителей, несколько экземпляров потребителей обычно настроены на использование разных разделов.Эти экземпляры вместе образуют группу потребителей, и они совместно используют группу.-id.
Уведомление:
- Поскольку одна и та же секция (Partation) может использоваться только одним экземпляром-потребителем (consumer) одновременно, количество экземпляров-потребителей (consumer), превышающее количество разделов (Partation), не имеет смысла, а избыточный потребитель (consumer) экземпляры также будут бездействовать.
- Если в группе потребителей (Consumer-group) есть экземпляры, которые меняются (вверх и вниз) или изменяется количество разделов (Partation), группа потребителей будет активирована.rebalence.
Репликация
Как kafka решает проблему высокой доступности данных? В распределенной среде единственный способ гарантировать, что данные не будут потеряны в максимально возможной степени, — этоСделайте несколько копий и поставьте их на разные машины, скопированные данные называются копией (репликацией).
Вот несколько ключевых слов.ОБ:high-water, специальное смещение, только сообщения ниже этого смещения могут быть прочитаны потребителями Конкретное значение уровня high-water зависит от состояния синхронизации данных реплики master-slave, которое здесь не будет раскрываться.ISR:In-sync-реплика, реплика, установленная в синхронизированном состоянии, относится к репликам, данные реплики которых отличаются от данных первичной реплики в пределах определенного возврата (временной диапазон или диапазон количества).Конечно, первичная реплика всегда должна находиться в ISR. . Когда первичная реплика умирает, новая первичная реплика будет выбрана из ISR, чтобы взять на себя ее работу.
OSR:В соответствии с IRS, out-sync-replica фактически относится к тем репликам, которых нет в ISR.
Синхронизация master-slave реплики
Когда часть данных реплицируется с помощью нескольких копий, должна быть задействована синхронизация основной и подчиненной копии, и подчиненная копия будет периодически извлекать самые последние данные из главной копии. Кроме того, следует отметить, что в kafka только главная копия будет обеспечивать чтение и запись во внешний мир (старшая версия подчиненной копии kafka обеспечивает ограниченную функцию чтения), и единственная роль подчиненной копии — служить в качестве резервная копия для основной копии.
Говоря о синхронизации master-slave, давайте, кстати, упомянем настройки ack Kafka. Producer (продюсер) в кафке можно пройтиrequest.required.acksпараметр для установки уровня достоверности данных:
- 0: Производитель (производитель) не ждет подтверждения от мастер-копии, и считается, что передача прошла успешно, когда она отправлена, что является наиболее эффективным, но может иметь риск потери данных.
- 1: (по умолчанию) После того, как производитель отправит данные, он будет ждать, пока первичная реплика подтвердит получение, прежде чем считать, что сообщение отправлено успешно.В этом случае первичная реплика может потерять сообщения, когда выйдет из строя.
- -1: (или все): производитель ждет, пока все реплики в ISR подтвердят, что данные были получены, прежде чем сообщение задачи будет успешно отправлено.Надежность самая высокая, но эффективность самая низкая, потому что ему нужно дождаться реплика должна быть извлечена и подтверждена.
Broker
Kafka управляет данными в измерении реплики. Для управления этими данными определенно требуется менеджер.Broker. Брокер будет планировать разные реплики одних и тех же данных на разных машинах и создавать новые реплики, когда количество реплик будет недостаточным, чтобы гарантировать, что данные не будут потеряны даже после выхода из строя некоторых брокеров.
Все брокеры также будут синхронизировать некоторые метаданные друг с другом, например, где находятся определенные мастер-данные и где извлекать данные из реплик...
Эпилог
В первый раз, когда я попытался в ручном стиле объяснить вводные знания о кафке, это было очень поверхностно, да и вообще многие детали не были раскрыты, извините.