不同计算机上的 Kafka 生产者和消费者不通信
Kafka producer and consumer on separate computers aren't communicating
我正在使用 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
在第一台电脑上,我做了一个话题,启动了一个producer console:
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 代理列表而不是 Zookeeper 法定人数:
所以改变这个:
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:
我正在使用 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
在第一台电脑上,我做了一个话题,启动了一个producer console:
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 代理列表而不是 Zookeeper 法定人数:
所以改变这个:
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: