跳到主要内容
英文版本为准

本页译自英文,由模型翻译。若与英文原文存在差异,以英文原文为准。

设计

ruststream-rdkafka 所处的位置:在 RustStream 运行时与 rust-rdkafka 客户端之间,每个订阅一个消费者,所有发布者共用一个生产者。

自上而下依次是服务、RustStream 运行时、本 crate、rust-rdkafka 客户端和 Kafka 集群你的服务RustStream 核心ruststream-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 集群

本 crate 在 rust-rdkafka 之上实现核心的 Broker trait,rust-rdkafka 封装了 librdkafka。它上面的运行时对每个 Broker 都相同。Kafka 特有的一切都在本 crate 里:描述符、ack 的含义、重试副本发往何处,以及事务如何提交。

每个订阅打开一个属于自己的 librdkafka 消费者,因此一个订阅就是它所在消费者组的一个成员。同一连接上的发布者共用一个生产者,第一次发布时打开它。事务发布者在自己的 transactional.id 下打开一个属于自己的生产者。

本 crate 没有为之提供类型的设置,就是一个 librdkafka 属性。config 系列透传方法可以设置其中每一个,未设置的属性保持 librdkafka 的默认值。

提交跟踪器把 ack 变成已存储的偏移量。EosPipeline 在生产者事务中提交已消费的偏移量。各部分如何启动和停止,见生命周期;一条记录的路径,见路径。