消息队列 Kafka版提供以下客户端相关的常见问题供您参考。
当 Kafka 客户端首次接入消息队列 Kafka版时,如果出现连接失败等异常,可参考以下步骤进行排查。
说明
您可以参考查看接入点文档,了解不同的实例接入点对网络环境及认证方式的要求,选择正确的接入点进行接入。
在私网环境中,使用 SASL_SSL 接入点连接 Kafka 实例时,出现类似certificate verify failed
的报错信息。
主要原因是在私网环境访问 Kafka 实例,实际是使用 IP 进行业务访问,而 IP 是一个可变的地址,无法在证书里面固定配置。
如果您坚持使用私网地址连接 Kafka 实例,需要在客户端配置ssl.endpoint.identification.algorithm=
参数,以关闭证书域名校验。
当您需要使用 SASL_SSL 接入点连接 Kafka 实例时,我们建议您为 Kafka 实例开通公网访问,使用公网访问地址连接实例。如何开通公网访问,请参见配置公网访问。
对接消息队列 Kafka版之后,Consumer 频繁出现分区再均衡的现象,主要原因是 Consumer 没有通过独立线程维持心跳状态、未能及时发送心跳状态,导致 Consumer 超时并离开 Group,引发分区再均衡。
Kafka 客户端支持设置 max.poll.interval.ms
参数,用于指定 Consumer 两次 poll 的最大时间间隔。如果 Consumer 无法在指定的时间范围内消费完拉取的消息,并再次 poll 消息,Kafka 则判定该消费者存在问题,导致客户端主动离开队列,而引发分区再均衡。
您可以通过以下方式防止频繁出现分区再均衡现象:
调整 poll 相关参数。
参数 | 配置说明 |
---|---|
Consumer 心跳超时时间,该参数可以由客户端自行设置。 | |
Consumer 每次 poll 返回的最大消息数量。 | |
Consumer 两次 poll 操作的最大时间间隔。默认为 5 分钟 |
提高客户端的消费速度,例如另外起一个线程用于处理消费逻辑。
合理设置 Group 订阅 Topic 的数量。
建议一个 Group 只订阅一个 Topic,或者订阅的 Topic 数量控制在 5 个以内。
如果 Group 订阅的 Topic 中有消息,但是 Consumer 未消费到最新的消费位点,且 Consumer 从服务端 poll 消息缓慢或 poll 不到消息,可能的原因包括流量触发带宽限制、单个消息体过大、每次 poll 的消息量过大等。
您可以参考以下方案排查处理:
问题原因 | 排查方式 | 处理方法 |
---|---|---|
消费流量达到实例的网络规格。 | 通过云监控查看实例的消息消费流量速率是否接近实例的规格。查看监控的方式请参考查看监控数据。 | 升级实例规格,详细操作步骤请参考升级实例规格。 |
EIP 带宽限制。 | 检查实例绑定的 EIP 带宽,查看 EIP 的最大带宽是否远远小于实例的消息消费流量速率。 | 扩充 EIP 带宽,详细操作步骤请参考修改带宽上限。 |
Kafka 支持通过以下参数设置 Consumer 每次 poll 的消息量。
参数 | 配置说明 |
---|---|
max.poll.records | 每次 poll 的最大消息数量。 |
fetch.max.bytes | 每次 poll 消息的总大小,单位为字节。建议小于当前网络带宽。 |
max.partition.fetch.bytes | 每个分区每次 poll 消息的总大小,单位为字节。建议 ** |