常见问题的解决办法
- 错误1: Local: Broker transport failure
- 错误2: Local: Bad message format
- 错误3: Local: Timed out
首先检查 Kafka 配置文件 server.properties
root@chen_unubtu18:/home/chen# vim ./kafka_2.11-1.1.0/config/server.properties
找到 listeners
和 advertised.listeners
配置项:
# The address the socket server listens on. It will get the value returned from
# java.net.InetAddress.getCanonicalHostName() if not configured.
# FORMAT:
# listeners = listener_name://host_name:port
# EXAMPLE:
# listeners = PLAINTEXT://your.host.name:9092
#listeners=PLAINTEXT://your.host.name:9092
# Hostname and port the broker will advertise to producers and consumers. If not set,
# it uses the value for "listeners" if configured. Otherwise, it will use the value
# returned from java.net.InetAddress.getCanonicalHostName().
#advertised.listeners=PLAINTEXT://your.host.name:9092
-
listeners
: 用于Kafka内置的Web服务器,该服务器对外提供REST API接口,为使用 Kafka Connect 的用户提供管理接口等服务。默认情况下它是被注释掉的,这意味着listeners
将绑定到服务器的 hostname。 -
advertised.listeners
: 这里配置的地址将由Kafka broker发布到zookeeper,如果未设置,将使用listeners
处的配置。Kafka 客户端程序使用这里的地址与Kafka broker通信(发布、订阅等等)。
你可能会好奇为什么需要 advertised.listeners
,为什么不合并到一起?假设你的 Kafka broker 位于代理后面。所有的
kafka 客户端都必须通过代理才能连接到broker。那么在这种情况下,就需要设置advertised.listeners
为代理的地址。
解决办法
对于在公司内网环境部署的Kafka,可以修改 listeners
将其绑定到服务器的IP地址:
listeners=PLAINTEXT://192.168.31.253:9092
如果Kafka部署在云平台上,区分内网IP和公网IP,需要这样配置:
listeners=PLAINTEXT://${内网IP}:9092
advertised.listeners=PLAINTEXT://${公网IP}:9092
如果你不被允许使用IP进行连接。可以修改Windows上的hosts文件(位置:C:\Windows\System32\drivers\etc\hosts
),添加域名到IP地址的映射:
192.168.31.253 chen_unubtu18
192.168.31.253
, chen_unubtu18
,最后使用Kafka
Assistant进行连接: