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

报错客户端:

Java,Go,Python

报错原因:

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

  • 网络问题

  • 客户端鉴权失败

解决方案:

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

鉴权方式(sasl_mechanism):

  • PLAIN: 所有语言可用,需要配置 AccessKeyId、AccessKeySecret 的后 10 位。
注意 您可以通过参见 消息队列 for Apache Kafka Demo 库 中的README.md更快更准确的进行配置。

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

报错客户端:

所有类型

报错原因:

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

解决方案:

通过消息队列 for Apache 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 平台,其它平台请用 Google 搜寻类似办法。

报错信息: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 数

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

  • VPC 访问查看峰值流量

  • 公网访问查看公网流量