kafka_client 0.4.0

A pure Rust Kafka client library with SASL authentication support
Documentation
*正在请求专家建议,优化解决方案,该过程耗时可能较长,请耐心等待...*

## kafka_client 对比测试问题总结

### 一、API调用/集成问题

| 问题 | 描述 | 影响 | 解决方案 |
|------|------|------|----------|
| **Bootstrap服务器解析失败** | 直接字符串解析多地址失败 | 无法连接到Kafka集群 | 改用 `ToSocketAddrs` 方式解析 |
| **UnknownTopicOrPartition未自动重试** | 错误码100未加入可重试列表 | 生产消息失败后直接报错退出 | 手动将 `ProduceError(100)` 加入重试列表并刷新元数据 |
| **默认偏移量策略为Latest** | `ConsumerConfig::default()` 默认使用 `Latest` | 消费已有消息时收不到数据 | 显式调用 `.with_earliest()` |
| **默认GroupConsumer模式过重** | 需要与GroupCoordinator交互(join/sync/heartbeat) | 初始化慢、容易超时 | 使用空group_id的SimpleConsumer模式 |
| **poll返回批量消息但无单条迭代接口** | `poll_timeout` 返回 `Vec<ConsumerRecord>`,需自行维护缓冲区 | 每次只取第一条会丢弃其余,吞吐量极低(实测仅4条/3秒) |[kafka_client.rs]file:///home/alex/code/open_source/kafka-benchmark/src/clients/kafka_client.rs#L77-L80 添加内部缓冲机制 |
| **KafkaError导出路径问题** | `error` 模块是private的 | 无法直接 `use kafka_client::error::KafkaError` | 改为从根路径导入 `use kafka_client::KafkaError` |

### 二、性能问题

| 场景 | rdkafka | kafka_client | 差距 |
|------|---------|--------------|------|
| **10B消息** | ~1.89M msg/s | ~24K msg/s | **78倍** |
| **1KB消息** | ~1.25M msg/s | ~227K msg/s | **5.5倍** |
| **10KB消息** | ~200K msg/s | ~167K msg/s | **1.2倍** |

### 三、根因分析

1. **小消息场景固定开销占比高**:每次fetch的RPC开销相似,但kafka_client的默认配置(`max_poll_records=500``partition_max_bytes=1MB`)导致小消息时批量效率低

2. **内部机制差异**:rdkafka有更完善的预取和流水线机制,而kafka_client的SimpleConsumer在每个poll周期中串行fetch所有分区,没有并行化处理

3. **首次fetch延迟**:kafka_client消费者初始化后第一次fetch需要先获取元数据和解析offset,延迟较长

### 四、优化建议

1. **增大批量参数**:提高 `max_poll_records``partition_max_bytes` 以减少RPC次数
2. **实现内部缓冲迭代器**:在客户端层面对poll结果进行缓冲,提供逐条消费的接口
3. **优化元数据刷新策略**:在首次连接或遇到UnknownTopicOrPartition时自动刷新元数据
4. **并行化fetch**:对多个分区并行发起fetch请求,充分利用网络带宽