就我而言,我的制作人使用 librdkafka,topic.metadata.refresh.interval.ms默认为 5 分钟。在broker端connections.max.idle.ms是2小时,我们的qps相当低,但是我们希望在rtt 20ms内完成99.9%的请求,但是如果broker关闭连接,生产者将重新建立通道并发送消息,这将获得很高的性能潜伏。看来元数据刷新不起作用。
我该如何解决这个问题?
对于每个元数据刷新,librdkafka 都会选择一个合适的代理连接来发送请求,它不会在所有代理连接上发送,也不会在真正随机的连接上发送,因此主题元数据刷新不能用于保留所有连接活。
Kafka 协议实际上并没有一种廉价或无副作用的方式来对空闲连接进行“心跳”(不要与 HeartbeatRequest 混淆)。
使用代理> = v0.11,可以仅发送针对集群信息的元数据请求(不请求任何主题,因此便宜)。如果您想要的话,我建议为 librdkafka 创建一个功能请求 github 问题。
但如果您不想收获空闲连接,为什么不将connections.max.idle.ms 设置得非常高呢?
| 归档时间: |
|
| 查看次数: |
7052 次 |
| 最近记录: |