首页 文章

Kafka - 简单的 consumer/producer 设置在不同的机器上不起作用,但在本地工作

提问于
浏览
1

我使用以下简单的producer/consumer教程安装并设置了Kafka

https://kafka.apache.org/quickstart

我有两台机器,两者都使用Ubuntu

简历问题:

如果我在同一台机器上使用producerconsumer,一切正常。如果我在machine 2上使用producer,而在machine 1上使用,例如kafkazookeeper服务器和consumer,我从未在machine 1上收到任何消息。

Machine 1 has IP: 192.168.1.100

Machine 2 has IP: 192.168.1.101

仅使用机器 1 的工作示例,具有 4 个控制台应用程序

控制台 1 - 启动了 zookeeper:

bin/zookeeper-server-start.sh config/zookeeper.properties

控制台 2 - 启动了 kafka 服务器

bin/kafka-server-start.sh config/server.properties

控制台 3创建了一个名为 test 的主题:

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

测试了主题:

bin/kafka-topics.sh --list --zookeeper localhost:2181

开始消费者

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test

控制台 4 - 发送一些消息:

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

有用!

NOT使用机器 1 和 2 的工作示例

机器 1 - 控制台 1 - 启动了 zookeeper:

bin/zookeeper-server-start.sh config/zookeeper.properties

机器 1 - 控制台 2 - 启动了 kafka 服务器

bin/kafka-server-start.sh config/server.properties

机器 1 - 控制台 3创建了一个名为 test 的主题:

bin/kafka-topics.sh --create --zookeeper 192.168.1.100:2181 --replication-factor 1 --partitions 1 --topic test

测试了主题:

bin/kafka-topics.sh --list --zookeeper 192.168.1.100:2181

开始消费者

bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.100:9092 --topic test

机器 2 - 控制台 1 - 在 IP 上发送一些消息给 kafka 192.168.1.100

bin/kafka-console-producer.sh --broker-list 192.168.1.100:9092 --topic test

不起作用......

我在这里错过了什么?

编辑:

我现在用 kafkacat 来测试 connection...here 是输出。

root@ubuntu:~/kafka/kafka_2.11-0.11.0.1# kafkacat -b 192.168.1.100 -t test -L
Metadata for test (from broker -1: 192.168.1.100:9092/bootstrap):
 1 brokers:
  broker 0 at ubuntu:9092
 1 topics:
  topic "test" with 1 partitions:
    partition 0, leader 0, replicas: 0, isrs: 0
%3|1507802180.807|FAIL|rdkafka#producer-1| [thrd:ubuntu:9092/0]: ubuntu:9092/0: Connect to ipv4#127.0.1.1:9092 failed: Connection refused
%3|1507802180.807|ERROR|rdkafka#producer-1| [thrd:ubuntu:9092/0]: ubuntu:9092/0: Connect to ipv4#127.0.1.1:9092 failed: Connection refused

为什么127.0.1.1:9092设置在上面?不应该是192.168.1.100:9092

1 回答

  • 3

    常见问题开始,常见的问题是主机名:

    当代理启动时,它会在 ZK 中注册 ip/port。您需要确保注册的 ip 与生产者配置中metadata.broker.list中列出的内容一致。默认情况下,注册的 ip 由InetAddress.getLocalHost.getHostAddress()给出。通常,这应该返回主机的真实 IP。但是,有时(e.g. ,在 EC2 中),返回的 ip 是内部的,无法从外部连接。解决方案是通过在server.properties中设置hostname属性来显式设置要在 ZK 中注册的主机 IP。在另一种罕见的情况下,绑定 host/port 与客户端连接的 host/port 不同,您可以为客户端连接设置advertised.host.nameadvertised.port

    所以,打开server.properties并更改hostname

    host.name=<your hostname>
    

    如果仍然无效,请尝试修改advertised.host.name

    advertised.host.name=<your ip>
    

    如果这确实不起作用,请查看advertised.listeners并确保它是0.0.0.0:port<your.ip>:port。例:

    advertised.listeners=PLAINTEXT://0.0.0.0:9092
    

相关问题