
# 为什么不建议使用Sarama客户端收发消息？
#### 问题现象
使用Sarama客户端收发消息可能存在以下问题：
- Sarama客户端无法感知分区变化，当Topic分区数增加时，需要重启客户端后才能正常消费。
- Sarama客户端消息最大处理时间（MaxProcessingTime）默认值为100ms，超过最大处理时间可能导致消费者无法消费。
- 当消费位点重置策略设置为Oldest(earliest)时，当客户端重启时，偏移量重置后可能从最小位点开始重复消费所有消息。
- 消费者同时订阅多个Topic时，部分分区可能无法消费到消息。
 
#### 解决方法
建议您使用[Confluent-Kafka-go](https://github.com/confluentinc/confluent-kafka-go)作为Kafka客户端库。
以下为您提供常用Golang客户端的对比，具体参见[表1]。
 表1常用Golang客户端对比 
| 客户端                | 优点                                                                                                                                                                                                                                                                                    | 缺点                                                                                                                                                                                                                                                              |
|:---|:---|:---|
| Confluent-Kafka-go | - Confluent-Kafka-go是由Confluent提供的官方Kafka客户端库，与Kafka完全兼容，支持所有的Kafka特性。  - 稳定性高，基于librdkafka，具有高性能和低延迟的特点。   | 增加编译复杂度。由于导入C++库，Golang编译器需要引入额外编译配置，增加了编译依赖，提高编译复杂度。                                                                                                                                                                                                           |
| Kafka-go           | - kafka-go是一个简单、轻量级的Kafka客户端库，易于学习和使用。  - kafka-go的代码库相对较小，依赖较少，可以减少应用程序的体积和依赖关系。                           | - Kafka-go相对于Confluent-Kafka-go来说，功能较为有限，不支持一些高级特性和复杂的配置选项。  - 性能和吞吐量较低，适用于一些对性能要求不高的简单应用场景。   |
| Sarama             | Sarama采用原生Golang语言编写，对于异步以及高并发操作支持度较好。                                                                                                                                                                                                                                                | - 问题较多，文档相对较少。  - Sarama在处理大量消息时，会占用较多的内存资源，可能会对应用程序的性能造成一定的影响。                             |
   
