要解决 Flink 连接到 Kafka 时遇到的“找不到 Topic”或“连接超时”问题,你可以检查并调整 Kafka 的 server.properties 配置文件。以下是几个关键配置项和步骤:

  1. **advertised.listeners**:
    确保 advertised.listeners 配置项设置为 Kafka 服务器对外可访问的地址。这应与 Flink 所在的机器可以访问的地址匹配。例如:

    1
    2
    3
    - 节点 1: `advertised.listeners=PLAINTEXT://192.168.23.60:9092`
    - 节点 2: `advertised.listeners=PLAINTEXT://192.168.23.61:9092`
    - 节点 3: `advertised.listeners=PLAINTEXT://192.168.23.62:9092`
  2. **listeners**:
    确保 listeners 配置项指向 Kafka 实际监听的地址和端口。通常设置为:

    1
    listeners=PLAINTEXT://0.0.0.0:9092
  3. **zookeeper.connect**:
    确保 zookeeper.connect 配置项正确,指定了所有 ZooKeeper 节点的地址和端口:

    1
    zookeeper.connect=bigdata1:2181,bigdata2:2181,bigdata3:2181
  4. 防火墙和网络
    确保服务器的防火墙允许来自 Flink 机器的流量访问 Kafka 端口(默认 9092)。可以使用 telnetnc 来测试连接:

    1
    telnet your.server.ip 9092

    1
    nc -zv your.server.ip 9092
  5. Kafka 日志
    检查 Kafka 的日志文件(通常位于 logs 目录)以查看是否有其他错误信息,这些信息可以帮助诊断连接问题。

  6. Flink 配置
    确保 Flink 的 Kafka 连接配置(如 bootstrap.servers)与 Kafka 实例的 advertised.listeners 配置匹配。

修改配置后,重新启动 Kafka 服务器并尝试重新连接。如果问题仍然存在,请提供更多的错误信息和日志。

在这种配置中,listenersadvertised.listeners 都使用了端口 9092,但 advertised.listeners 指定了具体的 IP 地址。如果所有节点的 advertised.listeners 都设置为相同的 IP 地址 192.168.23.60,这会导致问题,因为 Kafka 集群中的每个节点应具有唯一的广告地址。