Перейти к основному содержимому
Нормативная версия документации - английская

Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.

Консьюмер

Консьюмер librdkafka выбирает записи заранее в собственных потоках, выдаёт их по одной за опрос и фиксирует сохранённое смещение по таймеру.

Консьюмер librdkafka: потоки выборки, локальная очередь, опрос приложения, хранилище смещений и таймер фиксацииПотоки librdkafkaПриложениеКластер Kafkaлидеры партиций, координатор группыВыборканазначенных партицийЛокальная очередьвыбрано заранееАвтофиксацияпо таймеру,каждые 5 сОпросследующая записьОбработказаписиХранилищесмещенийв памяти,по позициина партицию
Схема текстом
  1. Потоки librdkafka: Выборка назначенных партиций; Локальная очередь выбрано заранее; Автофиксация по таймеру, каждые 5 с
  2. Приложение: Опрос следующая запись; Обработка записи; Хранилище смещений в памяти, по позиции на партицию
  3. Кластер Kafka лидеры партиций, координатор группы → Выборка назначенных партиций: записи
  4. Выборка назначенных партиций → Локальная очередь выбрано заранее
  5. Локальная очередь выбрано заранее → Опрос следующая запись
  6. Опрос следующая запись → Обработка записи
  7. Опрос следующая запись → Хранилище смещений в памяти, по позиции на партицию: при выдаче
  8. Обработка записи → Хранилище смещений в памяти, по позиции на партицию: или позже
  9. Хранилище смещений в памяти, по позиции на партицию → Автофиксация по таймеру, каждые 5 с: чтение
  10. Автофиксация по таймеру, каждые 5 с → Кластер Kafka лидеры партиций, координатор группы: фиксация

librdkafka выбирает записи назначенных партиций в локальную очередь до того, как приложение их попросит. Размер этой очереди ограничивает queued.max.messages.kbytes (64 МиБ). Когда очередь полна, выборка для партиции приостанавливается на fetch.queue.backoff.ms (одна секунда).

Опрос снимает с очереди следующую запись. StreamConsumer из rust-rdkafka делает это через recv, асинхронный вызов, который можно безопасно отменить.

Хранилище смещений - это позиция в памяти для каждой партиции. По умолчанию (enable.auto.offset.store) опрос сохраняет смещение записи, которую выдаёт, ещё до того, как приложение её обработало. Пунктирная стрелка показывает другой путь: приложение выключает автоматическое сохранение и сохраняет смещение, когда запись обработана.

Пока включён enable.auto.commit, таймер фиксирует сохранённые позиции каждые auto.commit.interval.ms (пять секунд) и ещё раз при закрытии консьюмера. При падении теряется то, что было обработано после последней фиксации, и это читается заново. При сохранении по умолчанию запись, сохранённая при выдаче и ещё не обработанная, после падения пропускается.

Поведение и значения по умолчанию взяты из librdkafka (управление смещениями, конфигурация).