Оригинал: Miss Sister Taste (идентификатор публичной учетной записи WeChat: xjjdog), добро пожаловать, пожалуйста, сохраните источник для перепечатки.
Прочитав эту статью, вы поймете, почему простая очередь сообщений может иметь так много знаний; сможете понять основные функции и сценарии применения Kafka; сможете разобраться в основных технических терминах Kafka. Узнайте, что такое долг!
Как распределенная система обмена сообщениями,Kafka
Имейте мышление, основанное на долге. Ей необходимо определиться со своей позицией, понять, какую ценность она для кого создает, от кого зависит ее жизнь и каковы ее обязанности.
Немногие системы сохраняют спокойствие в комическом вопросе столь гнетущей силы, ноKafka
Сопротивлялся, это было действительно смело.
Kafka
Основная его обязанность — использовать его в качестве очереди сообщений. Так что же такое очередь сообщений? Если этот вопрос не понят, это доказывает, чтоKafka
Их идейная осведомленность не очень высока, и им еще нужно продолжать думать и учиться.
Чтобы выяснить это, мы взяли интервью у молочника.
1. История молочника
Молоко вкусное и питательное, будь то свежее молоко, выжатое из молока, или синтетическое молоко, поэтому многие люди в сообществе заказывают его.
Каждое утро молочные рабочие вытягивают тележку молока, чтобы начать доставку молока. В начале он последовал за номером дома на книге, постучал в дверь каждой семьи, а затем поставил молоко в руку клиента. Иногда, когда клиент не дома, он должен посмотреть адресную книгу, чтобы найти номер телефона клиента, чтобы общаться. Но через некоторое время, так как бизнес стал больше и больше, оценка молокамана была только одним предложением: *неблагодарный.
Некоторые покупатели открывают дверь с сонными глазами, жалуясь, что он мешает их жизни; некоторые покупательницы приходят за молоком в пижаме, жалуясь на его непристойные глаза; некоторые клиенты идут на работу раньше, но при планировании маршрута молочника они Молоко доставили последним, поэтому я пожаловалась, что доставка несвоевременная.
К счастью, раньше молочник был программистом, немного подумав, он уговорил начальника выдать каждому покупателю коробку с молоком. Для работы ему нужно лишь регулярно наливать свежее молоко в коробку. Что касается того, когда клиент пойдет за ним, умоется ли он или потрет руки, ему все равно.
С тех пор он больше никогда не видел трупа, вырисовывающегося из-под пижамы.
Мы замечаем, что в приведенном выше сценарии участвуют две основные стороны: молочник и покупатель. Перед тем, как присоединиться к молочному ящику, их взаимодействие заблокировано, обработка информации неэффективна, и существуют серьезные проблемы с сопряжением, из-за которых молочник видит то, что не должен.
Конечно, после добавления молочного ящика изменилась логика взаимодействия, которую нужно адаптировать, к тому же молочный ящик имеет стоимость, если объем бизнеса не очень большой, добавление этой вещи повысит стоимость.
Давайте возьмем небольшое см. Вышеуказанная коробка для молока - это система сообщений. Каждая коробка молока - одна条
очередь сообщений. Молочные работники — это производители, покупатели — это потребители, а молоко — это новости. Клиенты не взяли молоко, что является отставанием информации. Клиент отправляет вам сообщение, чтобы подтвердить, что молоко было получено, то есть ACK...
2. Простейшая обобщенная система сообщений
Система обмена сообщениями! Это должно обеспечить средний уровень.Производителю нужно только отправить сообщение на определенный средний уровень, а потребителю нужно только получить информацию от среднего уровня.
Поэтому его простейшей формой является база данных.
На рисунке выше представлена типичная архитектура некоторых небольших систем. Учитывая бизнес-сценарий заказа, в нашу бизнес-систему поступает большое количество запросов, и если мы напрямую войдем в бизнес-таблицу через сложную бизнес-логику, будет большое количество сбоев тайм-аута запроса. Поэтому мы добавили промежуточную буферную таблицу для обработки запросов пользователей. Затем существует задача с синхронизацией, которая непрерывно получает данные из буферной таблицы и выполняет настоящую сложную обработку бизнес-логики.
Не сомневайтесь, это на самом деле最简陋的消息系统
, но у него много проблем.
- Интервал опроса запланированной задачи контролировать непросто. Бизнес-обработка подвержена задержкам.
- Мощность обработки нельзя масштабировать по горизонтали, и возникнут такие проблемы, как распределенные блокировки и последовательные гарантии.
- Когда другим предприятиям также нужны эти данные заказа, в запланированное задание необходимо добавить бизнес-логику.
Когда число посещений увеличивается, а бизнес-логика усложняется, появляется более высокая модель сообщения.
3. Основные требования к системе сообщений
Наши дежурные требования к системе сообщений следующие:
- Высокая производительностьВключая доставку сообщений и потребление сообщений, оба они выполняются быстро. Как правило, возможность параллельной обработки достигается за счет увеличения количества осколков. База данных, очевидно, является узким местом.
- достоверные новостиВ некоторых сценариях сообщения не могут быть потеряны. Сторона производства, потребления и MQ не может терять сообщения. Как правило, это решается увеличением копии и форсированием диска. База данных, очевидно, также резервируется мастером.
- Лучшая масштабируемостьМожет сопровождать вас, чтобы сделать проект больше и сопровождать вас на край света. После добавления узлов кластер растет без снижения производительности. Масштабируемость базы данных определенно сомнительна, и вы можете ввести некоторые сложные компоненты подбазы данных и подтаблиц.
- Экологическое созреваниеМониторинг, эксплуатация и обслуживание, многоязычная поддержка, активное сообщество. Это определяет, что используемое вами значение очереди сообщений не заслуживает вашего доверия.
Более того, у xjjdog есть еще одна статья, объясняющая это:Распределенная система обмена сообщениями, основы дизайна. Рисовать дракона и рисовать тигра сложно рисовать кости
Требований так много, а модель такая простая, в чем сложность? Почему у некоторых студентов болит голова при виде Кафки?
4. Насколько сложно просить свой долг
Поскольку модель системы сообщений представляет собой простую модель производителя-потребителя, почему современные системы сообщений такие сложные? На самом деле, его сложность в основном отражается в分布式
Эти три слова имеют мало общего с очередями сообщений, которые должны решать некоторые проблемы, с которыми сталкиваются все распределенные системы.
4.1 копий
Любые данные на одной машине ненадежны, потому что жесткий диск будет поврежден, питание будет отключено, а оптический кабель будет перекопан. Поэтому безопасность данных, как правило, обеспечивается избыточными многочисленными копиями. Другая роль реплики заключается в предоставлении дополнительных вычислительных мощностей, таких как определенные запросы, которые будут падать на реплику.Чем больше реплик, тем выше доступность.
!
После добавления копии происходит синхронизация данных. Даже самые быстрые локальные сети имеют задержку, не говоря уже о задержках синхронизации, вызванных различиями в производительности машин. Возникла проблема Данные, считанные по запросу реплики чтения, могут быть не самыми последними, а значит, изменилась консистентность данных. Конечно, есть средства для обеспечения согласованности данных, ноЧем больше реплик, тем больше задержка.
Добавление реплик также введет проблемы с ведущими рабами. После того, как главный узел умирает, должен быть узел реплики сверху. Координация этого процесса требует времени, а часть его недоступна.
Все системы обмена сообщениями требуют много кода для обработки этих исключений.
4.2 Перегородка
Когда тип данных достаточно велик (например, таблица), а операции над ним занимают очень много времени, необходимо такие данные разрезать и распределить по нескольким машинам. Этот процесс нарезки называется сегментированием, которое уменьшает размер данных одного запроса и увеличивает емкость кластера за счет сегментирования с определенными правилами.
Для данных шарда может быть только одно место для записи, котороеmaster
, остальные копии взяты изmaster
Скопируйте данные.
Реплики могут увеличить количество параллельных операций чтения, но будут читать грязные данные. Если данные, которые вы хотите прочитать, непротиворечивы, вы можете использовать метод синхронной записи, такой как метод KAFKA.ack=-1
, только если все синхронизации выполнены успешно, отправка считается успешной.
Но если у вас слишком много копий, этот процесс будет очень медленным. Вы можете захотеть координировать эффективность записи и чтения, выделив количество реплик для записи и чтения,Quorum
изR+W>N
Это стратегия компромисса.
5. Объяснение термина Кафки
Когда мы смотрим на определение кафки, в свою очередь, намного проще.
Kafka — это распределенная система обмена сообщениями (хранилища).Распределенные системы увеличивают параллелизм за счет сегментирования, повышают надежность за счет реплик., Кафка не исключение. Его структура не выходит за рамки базовой теории распределения, которую мы представили выше. Если объединить термины «реплики», «разделы», «тематические каналы», «производители» и «потребители», диаграмма может стать очень большой.
Вы устанавливаете Kafka на машину, затем машина называетсяBroker
, кластер KAFKA содержит один или несколько таких экземпляров. Это просто имя, и не имеет конкретного значения.
Компонент, отвечающий за запись данных в KAFKA, называетсяProducer
Производитель сообщения обычно записывается в бизнес-системе. И наша молочная работа – это измерение.
В KAFKA может отправляться много видов сообщений, как отличить их классификацию? этоTopic
Концепция чего-либо. тема分布式化
После этого может быть несколько Брокеров.
Разделите тему на несколько сегментов, и после увеличения параллелизма каждый сегмент называетсяPartition
, разделы обычно равномерно распределены по всем машинам.
Приложения, потребляющие данные в Kafka, называютсяConsumer
Мы даем потребительский бизнес, тему имени, такое имя называетсяConsumer Group
Посмотрите еще раз на конфигурационный файл Kafka Server, самые важные два параметра:partitions
иreplication.factor
, в принципе понятно.
Еще одно важное понятие. Kafka решает синхронизацию между репликами с помощьюISR
, что является одним из пунктов, которые необходимо проверить для интервью с Кафкой.
ISR означает «реплики Sync», является важным механизмом для обеспечения HA и последовательности. Количество копий пропускной способности Кафки в определенной степени, но значительно расширенная удобство использования. 2-3 вообще подходит.
Реплики имеют два элемента, один должен иметь достаточное количество номеров, а другой не попадать на один и тот же инстанс. ISR предназначены для разделов, и у каждого раздела есть список синхронизации. Среди N реплик одна реплика является ведущей, а остальные — последователями.Лидер обрабатывает все запросы на чтение и запись для раздела., остальное резервные копии. При этом ведомый будет пассивно и периодически реплицировать данные на ведущего.
Если цветок сильно отстает от лидера или не инициирует запрос на репликацию данных в течение определенного периода времени, лидер удалит его из ISR.
Лидер фиксирует только тогда, когда все реплики в ISR отправляют ACK лидеру.
6. Роль системы сообщений
Сказав это, пришло время поставить роль очереди сообщений, используя компьютер, чтобы объяснить условия:
- отсечение пикаОн используется для выполнения запросов, которые превышают возможности обработки бизнес-системы, чтобы обеспечить бесперебойную работу бизнеса. Это может сэкономить много денег, например, некоторые кампании seckill, не рассчитанные на пиковую производительность.
- буферОн существует как буферный уровень на уровне службы и медленном посадочном уровне, и его функция аналогична сглаживанию пиков, но в основном он используется для потока данных внутри службы. Например, массовая рассылка SMS.
- разъединениеПроект Инь Ши, и не может определить конкретные потребности. Очередь сообщений можно использовать в качестве уровня интерфейса для разделения важных бизнес-процессов. Вам нужно только соблюдать соглашения и программировать данные, чтобы получить масштабируемость.
- избыточностьДанные сообщений могут использоваться несколькими несвязанными предприятиями по принципу «один ко многим».
- прочностьОчередь сообщений может накапливать запросы, поэтому даже если бизнес-потребитель умрет на короткое время, это не повлияет на нормальную работу основного бизнеса.
Однако, поскольку Кафка — хороший парень, он отлично работает и может делать гораздо больше. Его обязанности шире, включая, но не ограничиваясь:
- Доставлять деловые сообщения
- Журнал действий пользователя • Элементы мониторинга и т. д.
- бревно
- Поток обработки, такой как некоторые агрегации
- Журнал фиксации, как избыточность для некоторых важных предприятий
- Источник событий, практическая отслеживаемость, концепции в DDD
Ниже приведен типичный пример использования ведения журнала.
7. Почему KAFKA быстрая
Как правило, Kafka используется из-за ее скорости, которая когда-то заставляла людей думать, что она может обрабатывать только некоторые сообщения, похожие на журнал. Тот факт, что Kafka поддерживает даже самые сложные транзакционные сообщения, — это великолепие, затмеваемое его скоростью.
Так почему так быстро? В общем, причин несколько:
- CacheФайловая система кэш-кэш PageCache Cache
- писать последовательноПоследовательная запись на диск в большинстве случаев выполняется быстрее, чем случайная запись в память, благодаря технологиям упреждающего чтения и записи, предоставляемым современными операционными системами.
- Zero-copyНулевое копирование, на одну подкачку памяти меньше
- Batching of MessagesПакетная обработка. Объединяйте небольшие запросы, а затем взаимодействуйте в потоковом режиме, достигая ограничения сети.
- Режим вытягиванияИспользуйте режим извлечения для получения и потребления сообщений, который соответствует возможностям обработки потребителя.
Это основные моменты, а что касается сжатия, оптимизации производительности JVM и т. д., то это все педиатрические вопросы, и их нельзя использовать на столе.
End
Видно, что Kafka - это всестороннее игрок, способное как к обработке сообщений, так и для хранения данных. Он не сожалеет и не сожалеет. Хотя это чрезвычайно эффективно, он также должен работать не остановка, что отражает самую трагическую судьбу трудящихся-мигрантов.
Его дизайн распределенной системы также очень хорош, это система, адаптированная его разработчиками для него: узел Kafka падает, и появляются новые узлы Kafka, после более чем десяти секунд Pain, а затем вы можете полностью забыть о его жертве.
Kafka — это специализированная распределенная система обмена сообщениями, но не ограничивайтесь ею. Ему выделено только 1-ядерный процессор и 512 Мб памяти, это для того, чтобы отточить его неукротимую волю в жестких условиях, ах!
Не будет ли у вас болеть совесть, если вы потеряете свои данные и поругаете его за нестабильность?
Об авторе:Мисс сестра вкус(xjjdog), публичная учетная запись, которая не позволяет программистам идти в обход. Сосредоточьтесь на инфраструктуре и Linux. Десять лет архитектуры, десятки миллиардов ежедневного трафика, обсуждение с вами мира высокой параллелизма, дающие вам другой вкус. Мой личный WeChat xjjdog0, добро пожаловать в друзья для дальнейшего общения.