本章节汇总了客户端的常见报错、报错原因及解决方案。

报错信息:Not authorized to access group?

报错客户端

所有类型

报错原因

如果您的 Consumer Group 没有创建,则会遇此报错信息。

解决方案

您可在控制台或调用管控 API 创建 Consumer Group。具体步骤请参见创建 Consumer GroupCreateConsumerGroup

报错信息:TimeoutException(Java) 或 run out of brokers(Go) 或 Authentication failed for user(Python)

报错客户端

Java,Go,Python

报错原因

该错误可能由以下原因导致:

  • 网络问题

  • 客户端鉴权失败

解决方案

首先,请确保 servers 配置正确,然后通过telnet排除网络问题。假设网络运行正常,消息队列 Kafka 版在建立连接时,会对客户端进行鉴权。

鉴权方式(sasl_mechanism):

PLAIN: 所有语言可用,需要配置 AccessKeyId、AccessKeySecret 的后 10 位。

注意 您可以通过参见 消息队列 Kafka 版 Demo 库 中的README.md更快更准确的进行配置。

报错信息:Leader is not available 或 leader is in election

报错客户端

所有类型

报错原因

Topic 初始化过程中会短暂地报出该错。如果一直报,可能是没有创建 Topic。

解决方案

通过消息队列 Kafka 版控制台查看 Topic 是否已创建。若未创建,请创建 Topic。

报错信息:array index out of bound exception

报错客户端

Java

报错原因

该错误的产生是因为 Spring Cloud 会按自己的格式解析消息内容。

如果您同时使用 Spring Cloud 发送和消费,则不会有问题,这也是推荐的使用方式。

解决方案

如果您使用其他方式发送,例如,调用 Kafka 原生的 Java 客户端发送,那么用 Spring Cloud 消费时,则需要设置headerMode为 “raw”,即禁用解析消息内容。 具体信息,请参见 Spring Cloud 官网

报错信息:No such configuration property: "sasl.mechanisms" 或 No worthy mechs found

报错客户端

C++,或包装 C++ 的客户端(PHP、Node.js 等)

报错原因

SASL 和 SSL 模块没装好。

解决办法

执行以下命令安装 SASL 和 SSL:

  • 安装 SSL: sudo yum install openssl openssl-devel

  • 安装 SASL:yum install cyrus-sasl{,-plain}

注意 该解决办法只适用 CentOS 平台,其它平台请搜寻类似办法。

报错信息:No KafkaClient Entry

报错客户端

Java

报错原因

未找到kafka_client_jaas.conf配置文件。

解决方案

首先准备好kafka_client_jaas.conf,放在任意目录下,这里假设为/home/admin

Java 的安全登录设置是系统性的,有两种设置方法:

  • 设置系统变量:

    • 通过设置 JVM 参数 -Djava.security.auth.login.config=/home/admin/kafka_client_jaas.conf
    • 通过代码设置 System.setProperty("java.security.auth.login.config","/home/admin/kafka_client_jaas.conf")

      注意 如果是代码中设置,一定要保证代码在启动 Kafka 客户端之前执行。
  • 配置系统文件

    ${JAVA_HOME}/jre/lib/java.security中增加以下内容:login.config.url.1=file:/home/admin/kafka_client_jaas.conf

更多信息,请参见 Oracle JAAS Login Configuration File

报错信息:Error sending fetch request 或 DisconnectException

报错客户端

Java

报错原因

Consumer 拉取消息失败报错。可能的原因:

  • 网络问题

  • 拉取消息超时

解决方案

首先,请确保 servers 配置正确,然后通过 telnet 排除网络问题。假设网络运行正常,可能是拉取消息超时引起。可以尝试调整下列两个参数,限制单次拉取的消息量:

  • fetch.max.bytes 单次拉取操作,服务端返回最大 Bytes 数
  • max.partition.fetch.bytes 单次拉取操作,服务端单个 Partition 返回最大 Bytes 数

服务端流量限制,可以通过消息队列 Kafka 版控制台的实例详情页面的基本信息区域查看相应内容:

  • VPC 访问查看峰值流量

  • 公网访问查看公网流量