英文版本为准
本页译自英文,由模型翻译。若与英文原文存在差异,以英文原文为准。
设计
ruststream-rdkafka 所处的位置:在 RustStream 运行时与 rust-rdkafka 客户端之间,每个订阅一个消费者,所有发布者共用一个生产者。
以文字阅读本图
- 你的服务: #[subscriber] 订阅者处理器; RustStream::new(..) .with_broker(..)
- RustStream 核心: 运行时:分发、工作分区、结算
- ruststream-rdkafka: KafkaSubscriber 产出 KafkaMessage; KafkaPublisher 和事务 发布者; 提交跟踪器; EosPipeline; KafkaBroker 配置; KafkaTopic, KafkaTopics, KafkaPartitions
- rust-rdkafka 与 librdkafka: StreamConsumer 每个订阅一个; FutureProducer 每个连接一个
- #[subscriber] 订阅者处理器 → 运行时:分发、工作分区、结算: 挂载到
- 运行时:分发、工作分区、结算 → KafkaSubscriber 产出 KafkaMessage: 轮询流
- KafkaSubscriber 产出 KafkaMessage → StreamConsumer 每个订阅一个
- KafkaPublisher 和事务 发布者 → FutureProducer 每个连接一个
- StreamConsumer 每个订阅一个 → Kafka 集群
- FutureProducer 每个连接一个 → Kafka 集群
本 crate 在 rust-rdkafka 之上实现核心的 Broker trait,rust-rdkafka 封装了 librdkafka。它上面的运行时对每个 Broker 都相同。Kafka 特有的一切都在本 crate 里:描述符、ack 的含义、重试副本发往何处,以及事务如何提交。
每个订阅打开一个属于自己的 librdkafka 消费者,因此一个订阅就是它所在消费者组的一个成员。同一连接上的发布者共用一个生产者,第一次发布时打开它。事务发布者在自己的 transactional.id 下打开一个属于自己的生产者。
本 crate 没有为之提供类型的设置,就是一个 librdkafka 属性。config 系列透传方法可以设置其中每一个,未设置的属性保持 librdkafka 的默认值。
提交跟踪器把 ack 变成已存储的偏移量。EosPipeline 在生产者事务中提交已消费的偏移量。各部分如何启动和停止,见生命周期;一条记录的路径,见路径。