Лидер считывает соответствующий Log согласно Offset.
Из-за ограничений Kafka Client, при использовании Kafka Client потребитель может потреблять данные только от Лидера. Если в будущем будет предоставлен VDL Client, это ограничение не будет действовать.
VDL поддерживает часть протокола Kafka версии 0.10, что позволяет использовать оригинальный клиент Kafka или новый клиент VMS. Поддерживаемые протоколы:
Категория | Описание протокола Kafka | Поддержка | Примечание |
---|---|---|---|
Metadata API | Описывает доступные брокеры, включая их хосты и порты, а также информацию о том, какие темы и разделы есть на каждом брокере | Да | Возвращает информацию о маршрутизации потока журналов. |
Produce API | Интерфейс отправки сообщений | Да | N/A |
Fetch API | Интерфейс получения сообщений | Да | Реализует модель длинного опроса. |
Offset API | Используется для получения диапазона допустимых смещений в теме | Частично | Поддерживается получение последнего смещения и первого допустимого смещения. Не поддерживается запрос смещения по времени? |
Offset Commit/Fetch API | Начиная с версии Kafka 0.8.2, предоставляется функция хранения смещений потребителей на брокере | Нет поддержки | Хранятся смещения потребления. |
Group Membership API | Используется для управления группами потребителей | Да | Достигается уровень прямого доступа к VDL из оригинального клиента. |
Administrative API | Управленческий интерфейс | Частичная поддержка | Соответствует требованиям оригинального клиента, создание и удаление тем обрабатывается Management. |
В Kafka используется основанный на TCP двоичный протокол, Produce является типичным примером Request/Response. В протоколе Produce запроса можно включить один или несколько Log. Таким образом, принцип работы Produce может быть следующим (реализация разных клиентов Kafka может отличаться):
Для ответа Produce определены следующие условия:
Kafka 0.10 позволяет хранить смещения потребления на брокере, но на данный момент VDL не поддерживает эту функцию. Потребителю необходимо самостоятельно сохранять смещения.
Поток журналов VDL можно рассматривать как тему Kafka с одним разделом, Kafka назначит раздел группе потребителей, но поток журналов VDL имеет только один раздел, поэтому одновременно может потребляться только одним экземпляром потребителя в одной группе потребителей.
Как описано в разделе «Архитектура», набор реплик VDL состоит из группы серверов VDL (процессов), которые используются для хранения одинаковых данных журнала. Сервер VDL в основном состоит из модуля RPC Interface, модуля обработчика потока журналов и модуля согласованности (Raft). Как показано на рисунке ниже:
Журнал Raft
Журнал, используемый алгоритмом Raft, предназначен для хранения информации Raft и данных журнала, отправленных клиентом. Журнал Raft обеспечивает запись на диск после фиксации Raft.
Журнал Raft состоит из нескольких сегментов фиксированного размера, что упрощает удаление данных журнала. Каждый сегмент состоит из нескольких журналов, каждый журнал состоит из информации Raft и данных Log.
Информация Raft: включает тип журнала и информацию Raft, такую как срок действия и индекс.
Данные Log: в зависимости от типа журнала хранятся данные журнала Raft или данные журнала, отправленные клиентом.
Сервер VDL кэширует часть самого последнего журнала Raft в памяти, чтобы потребитель мог быстро выполнять Tailing Read и избегать операций ввода-вывода на диске.
Индекс Raft
Файл, используемый для хранения индекса журнала Raft. В алгоритме Raft необходимо использовать индекс для определения местоположения журнала Raft. Индекс Raft также состоит из нескольких сегментов индекса фиксированного размера, каждый сегмент состоит из нескольких Idx. Idx имеет два важных поля: File Position, указывающее на файл сегмента журнала Raft, и Inner File Position, указывающий на смещение в файле сегмента.
Каждый сегмент имеет фиксированный размер, предположим, M байт, Idx также имеет фиксированную длину, предположим, N байт, если вы хотите определить индекс X журнала Raft Log, используйте X * N / M, чтобы получить конкретный сегмент, предположим, Y, затем используйте (X * N – M * Y) / N, чтобы получить позицию индекса в сегменте.
Индекс Raft не записывается на диск в режиме реального времени, сервер VDL поддерживает часть самого последнего индекса данных в памяти и записывает его на диск, когда размер данных превышает N раз PageSize.
Индекс журнала
Индекс данных журнала, отправляемых клиентом. В отличие от индекса Raft, индекс журнала индексирует только данные журнала клиента и не индексирует журналы, созданные алгоритмом Raft.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )