为什么不建议使用Sarama客户端收发消息?
问题现象
使用Sarama客户端收发消息存在以下问题:
- Sarama客户端无法感知分区变化,当Topic分区数增加时,需要重启客户端后才能正常消费。
- Sarama客户端消息最大处理时间(MaxProcessingTime)默认值为100ms,超过最大处理时间可能导致消费者无法消费。
- 当消费位点重置策略设置为Oldest(earliest)时,当客户端重启时,偏移量重置后可能从最小位点开始重复消费所有消息。
- 消费者同时订阅多个Topic时,部分分区可能无法消费到消息。
解决方法
建议您使用Confluent-Kafka-go作为Kafka客户端库。
以下为您提供常用Golang客户端的对比,具体参见表1。
客户端 |
优点 |
缺点 |
---|---|---|
Confluent-Kafka-go |
|
增加编译复杂度。由于导入C++库,Golang编译器需要引入额外编译配置,增加了编译依赖,提高编译复杂度。 |
Kafka-go |
|
|
Sarama |
Sarama采用原生Golang语言编写,对于异步以及高并发操作支持度较好。 |
|