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

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

Устройство

Где стоит ruststream-rdkafka: между рантаймом RustStream и клиентом rust-rdkafka, один консьюмер на подписку, один общий продюсер.

Сверху вниз: сервис, рантайм RustStream, этот крейт, клиент rust-rdkafka и кластер KafkaВаш сервисЯдро RustStreamruststream-rdkafkarust-rdkafka и librdkafka#[subscriber]обработчики-подписчикиRustStream::new(..).with_broker(..)Рантайм: диспетчер, партиции, завершениеKafkaSubscriberвыдаёт KafkaMessageKafkaPublisherи транзакционныеиздателиУчёт фиксацийEosPipelineKafkaBrokerконфигурацияKafkaTopic,KafkaTopics,KafkaPartitionsStreamConsumerпо одному на подпискуFutureProducerодин на соединениеКластер Kafka
Схема текстом
  1. Ваш сервис: #[subscriber] обработчики-подписчики; RustStream::new(..) .with_broker(..)
  2. Ядро RustStream: Рантайм: диспетчер, партиции, завершение
  3. ruststream-rdkafka: KafkaSubscriber выдаёт KafkaMessage; KafkaPublisher и транзакционные издатели; Учёт фиксаций; EosPipeline; KafkaBroker конфигурация; KafkaTopic, KafkaTopics, KafkaPartitions
  4. rust-rdkafka и librdkafka: StreamConsumer по одному на подписку; FutureProducer один на соединение
  5. #[subscriber] обработчики-подписчики → Рантайм: диспетчер, партиции, завершение: монтируются
  6. Рантайм: диспетчер, партиции, завершение → KafkaSubscriber выдаёт KafkaMessage: опрашивает поток
  7. KafkaSubscriber выдаёт KafkaMessage → StreamConsumer по одному на подписку
  8. KafkaPublisher и транзакционные издатели → FutureProducer один на соединение
  9. StreamConsumer по одному на подписку → Кластер Kafka
  10. FutureProducer один на соединение → Кластер Kafka

Крейт реализует трейты брокера из ядра поверх rust-rdkafka, обёртки над librdkafka. Рантайм над ним один для всех брокеров. Всё, что относится к Kafka, лежит в этом крейте: дескрипторы, смысл ack, адрес копии для повтора и то, как фиксируется транзакция.

Каждая подписка открывает собственный консьюмер librdkafka, поэтому подписка - один участник своей группы консьюмеров. Издатели одного соединения делят один продюсер, и открывает его первая публикация. Транзакционный издатель открывает собственный продюсер под своим transactional.id.

Настройка, для которой в крейте нет типа, - это свойство librdkafka. Через config можно задать любое из них, а незаданное свойство сохраняет значение librdkafka по умолчанию.

Учёт фиксаций превращает подтверждения в сохранённые смещения. EosPipeline фиксирует прочитанные смещения внутри транзакции продюсера. Как части запускаются и останавливаются, показывает страница Жизненный цикл, а путь одной записи - страница Путь.