文档首页/ 分布式消息服务Kafka版/ 用户指南(巴黎区域)/ 常见问题/ 连接问题/ 为什么不建议使用Sarama客户端收发消息?
更新时间:2024-04-07 GMT+08:00

为什么不建议使用Sarama客户端收发消息?

问题现象

使用Sarama客户端收发消息存在以下问题:

  • Sarama客户端无法感知分区变化,当Topic分区数增加时,需要重启客户端后才能正常消费。
  • Sarama客户端消息最大处理时间(MaxProcessingTime)默认值为100ms,超过最大处理时间可能导致消费者无法消费。
  • 当消费位点重置策略设置为Oldest(earliest)时,当客户端重启时,偏移量重置后可能从最小位点开始重复消费所有消息。
  • 消费者同时订阅多个Topic时,部分分区可能无法消费到消息。

解决方法

建议您使用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在处理大量消息时,会占用较多的内存资源,可能会对应用程序的性能造成一定的影响。