【问题标题】:Kafka producer and consumer on separate computers aren't communicating不同计算机上的 Kafka 生产者和消费者没有通信
【发布时间】:2018-10-29 06:15:14
【问题描述】:

我正在使用 kafka_2.11-1.1.0。这是我的 server.properties 文件:

broker.id=1
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/tmp/kafka-logs
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=192.168.1.110:2181,192.168.1.64:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0

在第二台计算机上,broker.id=2。我通过在命令提示符中键入 ipconfig 并在一台计算机上使用以太网适配器本地连接下的 IPv4 地址和另一台计算机上的无线 LAN 适配器 Wi-Fi 下的 IPv4 地址来获得 zookeeper.connect 行的 IP 号码。

我在每台计算机上运行了这些命令(对于跟随的任何人,在运行第二台计算机之前在两台计算机上运行第一个命令):

bin\windows\zookeeper-server-start.bat config\zookeeper.properties
bin\windows\kafka-server-start.bat config\server.properties

在第一台电脑上,我做了一个话题,启动了一个生产者控制台:

bin\windows\kafka-topics.bat --create --zookeeper 192.168.1.110:2181 --replication-factor 2 --partitions 1 --topic test
bin\windows\kafka-console-producer.bat --broker-list 192.168.1.110:2181 --topic test

在第二个中,我启动了一个消费者控制台:

bin\windows\kafka-console-consumer.bat --bootstrap-server 192.168.1.64:2181 --topic test

当我尝试发送消息时,消费者没有收到它。每台计算机上的zookeeper服务器控制台循环通过以下消息,但每个IP值对应其各自的PC,并且端口号随着每个循环增加一个(大约每秒一次):

INFO Accepted socket connection from /192.168.1.110:55371 (org.apache.zookeeper.server.NIOServerCnxnFactory)
WARN Exception causing close of session 0x0 due to java.io.EOFException (org.apache.zookeeper.server.NIOServerCnxn)
INFO Closed socket connection for client /192.168.1.110:55371 (no session established for client) (org.apache.zookeeper.server.NIOServerCnxn)

在生产者控制台,一分钟后收到此错误:

ERROR Error when sending message to topic test with key: null, value: 6 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.

我该如何解决这个问题?任何帮助将不胜感激。

更新 - 已解决 - 由 Victor 提供:

变化:

bin\windows\kafka-console-producer.bat --broker-list 192.168.1.110:2181 --topic test

bin\windows\kafka-console-consumer.bat --bootstrap-server 192.168.1.64:2181 --topic test

收件人:

bin\windows\kafka-console-producer.bat --broker-list 192.168.1.110:9092 --topic test

bin\windows\kafka-console-consumer.bat --bootstrap-server 192.168.1.64:9092 --topic test

更新 2

对于任何遵循此方法以使用 Kafka 设置两台计算机的人 - 我发现这种方法并不总是有效。我后来发现的永久解决方案是为两台计算机使用相同的 IP。我使用的计算机的 IP 与以太网连接,恰好是生产者的那个。

【问题讨论】:

  • 我投票关闭这个作为一个错字。 Kafka 文档指出,默认情况下,您在 9092 上通过 Kafka 发送和接收消息。你给了 Zookeeper(可能是从主题命令复制的)

标签: apache-kafka apache-zookeeper kafka-consumer-api kafka-producer-api


【解决方案1】:

我相信您必须将 Kafka 代理列表而不是 Zookeeper quorum 传递给生产者:

所以改变这个:

bin\windows\kafka-console-producer.bat --broker-list 192.168.1.110:2181

这样的:

bin\windows\kafka-console-producer.bat --broker-list 192.168.1.110:9092

(我假设您正在那里运行您的 Kafka 服务器)

我遇到了类似的错误,使用 Spark Streaming 写入 Kafka:

Error connecting to Zookeeper with Spark Streaming Structured

【讨论】:

  • 嘿,谢谢,它有效!对于尝试进行相同设置的任何人,请将生产者和消费者代码端口都更改为 9092。此外,请确保在两台计算机上启动 Zookeeper,然后再在其中一台计算机上启动 Kafka。
  • 嗨@aaa,如果此设置适合您,请随时接受我对问题的回答。谢谢!
  • 你不必“必须”通过 Kafka,Zookeeper 应该可以工作,但使用 --zookeeper,但它是 Kafka 0.9 之后协议的一部分,建议改用它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 2019-11-01
  • 2015-03-25
  • 2019-01-15
  • 1970-01-01
相关资源
最近更新 更多