为什么不建议使用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语言编写,对于异步以及高并发操作支持度较好。 |
|
连接问题 所有常见问题
- 选择和配置安全组
- Kafka实例是否支持公网访问?
- Kafka实例的连接地址默认有多少个?
- 是否支持跨Region访问?
- Kafka实例是否支持跨VPC访问?
- Kafka实例是否支持不同的子网?
- Kafka是否支持Kerberos认证,如何开启认证?
- Kafka实例是否支持无密码访问?
- 开启公网访问后,在哪查看公网IP地址?
- Kafka支持服务端认证客户端吗?
- 连接开启SASL_SSL的Kafka实例时,ssl truststore文件可以用PEM格式的吗?
- 下载的证书JKS和CRT有什么区别?
- Kafka支持哪个版本的TLS?
- Kafka实例连接数有限制吗?
- 客户端单IP连接的个数为多少?
- Kafka实例的内网连接地址可以修改吗?
- 不同实例中,使用的SSL证书是否一样?
- 为什么不建议使用Sarama客户端收发消息?
more