You need to enable JavaScript to run this app.
导航
客户端
最近更新时间:2024.06.05 17:27:53首次发布时间:2023.07.03 15:36:59

消息队列 Kafka版提供以下客户端相关的常见问题供您参考。

FAQ 列表

客户端首次接入时的问题排查

当 Kafka 客户端首次接入消息队列 Kafka版时,如果出现连接失败等异常,可参考以下步骤进行排查。

  1. 排查网络连接问题。
    在客户端环境中连接 Kafka 实例的接入点,如果连接失败,表示客户端无法连接 Kafka 实例的服务端。该现象主要由以下原因造成:
    • Kafka 客户端部署在 ECS 实例中,ECS 实例与 Kafka 实例不在同一个地域或 VPC。此时如果通过默认接入点连接实例,则会连接失败,应使用公网接入点进行连接。详细说明请参考使用 SASL_SSL 接入点连接实例
    • Kafka 客户端部署在本地 IDC 或其他环境中,如果通过私网接入点连接实例,则会连接失败,应使用公网接入点进行连接。详细说明请参考使用 SASL_SSL 接入点连接实例
    • 客户端 IP 地址未不在 Kafka 实例的白名单范围内。修改白名单的方式,请参考为白名单绑定实例

    说明

    您可以参考查看接入点文档,了解不同的实例接入点对网络环境及认证方式的要求,选择正确的接入点进行接入。

  2. 排查客户端版本问题。
    推荐客户端使用与服务端 Kafka 版本号相匹配的版本。如果客户端的 Kakfa 版本过低,可能出现连接异常等现象。您可以在控制台的实例列表中查看指定实例对应的 Kakfa 版本,并更新对应的客户端版本。
  3. 排查接入配置问题。
    SASL_SSL 用户账号密码、用户权限等配置错误,也可能导致接入失败。您可以参考消息队列 Kakfa版提供的消息生产与消费 Demo,正确配置相关参数。

为什么私网环境使用 SASL_SSL 接入点连接实例时,报错域名校验失败?

在私网环境中,使用 SASL_SSL 接入点连接 Kafka 实例时,出现类似certificate verify failed的报错信息。
主要原因是在私网环境访问 Kafka 实例,实际是使用 IP 进行业务访问,而 IP 是一个可变的地址,无法在证书里面固定配置。
如果您坚持使用私网地址连接 Kafka 实例,需要在客户端配置ssl.endpoint.identification.algorithm=参数,以关闭证书域名校验。
当您需要使用 SASL_SSL 接入点连接 Kafka 实例时,我们建议您为 Kafka 实例开通公网访问,使用公网访问地址连接实例。如何开通公网访问,请参见配置公网访问

为什么消费客户端频繁出现分区再均衡(Rebalance)现象?

对接消息队列 Kafka版之后,Consumer 频繁出现分区再均衡的现象,主要原因是 Consumer 没有通过独立线程维持心跳状态、未能及时发送心跳状态,导致 Consumer 超时并离开 Group,引发分区再均衡。
Kafka 客户端支持设置 max.poll.interval.ms 参数,用于指定 Consumer 两次 poll 的最大时间间隔。如果 Consumer 无法在指定的时间范围内消费完拉取的消息,并再次 poll 消息,Kafka 则判定该消费者存在问题,导致客户端主动离开队列,而引发分区再均衡。
您可以通过以下方式防止频繁出现分区再均衡现象:

  1. 调整 poll 相关参数。

    参数

    配置说明

    session.timeout.ms

    Consumer 心跳超时时间,该参数可以由客户端自行设置。
    建议维持默认值 10s。

    max.poll.records

    Consumer 每次 poll 返回的最大消息数量。
    建议降低该参数值,建议远远小于单个线程每秒消费的条数 * 消费线程的个数 * max.poll.interval.ms的积。

    max.poll.interval.ms

    Consumer 两次 poll 操作的最大时间间隔。默认为 5 分钟
    建议该值大于max.poll.records / (单个线程每秒消费的条数 * 消费线程的个数)的值。

  2. 提高客户端的消费速度,例如另外起一个线程用于处理消费逻辑。

  3. 合理设置 Group 订阅 Topic 的数量。
    建议一个 Group 只订阅一个 Topic,或者订阅的 Topic 数量控制在 5 个以内。

Consumer poll 消息缓慢或 poll 不到消息

如果 Group 订阅的 Topic 中有消息,但是 Consumer 未消费到最新的消费位点,且 Consumer 从服务端 poll 消息缓慢或 poll 不到消息,可能的原因包括流量触发带宽限制、单个消息体过大、每次 poll 的消息量过大等。
您可以参考以下方案排查处理:

问题原因

排查方式

处理方法

消费流量达到实例的网络规格。

通过云监控查看实例的消息消费流量速率是否接近实例的规格。查看监控的方式请参考查看监控数据

升级实例规格,详细操作步骤请参考升级实例规格
或者通过下表中的参数限制 Consumer 每次 poll 的消息量。

EIP 带宽限制。

检查实例绑定的 EIP 带宽,查看 EIP 的最大带宽是否远远小于实例的消息消费流量速率

扩充 EIP 带宽,详细操作步骤请参考修改带宽上限

Kafka 支持通过以下参数设置 Consumer 每次 poll 的消息量。

参数

配置说明

max.poll.records

每次 poll 的最大消息数量。

fetch.max.bytes

每次 poll 消息的总大小,单位为字节。建议小于当前网络带宽。

max.partition.fetch.bytes

每个分区每次 poll 消息的总大小,单位为字节。建议 **max.partition.fetch.bytes * 订阅的分区总数**小于当前网络带宽。