卡夫卡用docker使用kafka-rb设置客户端

对卡夫卡来说,我是完全陌生的,而且我也遇到了麻烦。

我使用docker-compose为docker设置了“wurstmeister / kafka-docker”:

zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181" kafka: image: wurstmeister/kafka ports: - "9092:9092" links: - zookeeper:zk environment: KAFKA_ADVERTISED_HOST_NAME: 192.168.59.103 # KAFKA_AUTO_CREATE_TOPCIS_ENABLE: 'true' KAFKA_CREATE_TOPICS: "events:1:1" volumes: - /var/run/docker.sock:/var/run/docker.sock 

对于生产者和消费者,我使用ruby“kafka-rb”。

制片人:

 require 'kafka' producer = Kafka::Producer.new({ host: "192.168.59.103", port: 9092, topic: "events" }) 1000000.times do |i| message = Kafka::Message.new("Message #{i}") producer.push(message) end 

消费者:

要求'kafka'

 consumer = Kafka::Consumer.new({ host: "192.168.59.103", port: 9092, topic: "events" }) consumer.loop do |messages| puts "Received" puts messages end 

但我仍然被拒绝连接或错误:

 [2015-07-15 09:50:49,769] ERROR Closing socket for /192.168.59.3 because of error (kafka.network.Processor) kafka_1 | java.nio.BufferUnderflowException kafka_1 | at java.nio.HeapByteBuffer.get(HeapByteBuffer.java:145) kafka_1 | at java.nio.ByteBuffer.get(ByteBuffer.java:692) kafka_1 | at kafka.api.ApiUtils$.readShortString(ApiUtils.scala:38) kafka_1 | at kafka.api.LeaderAndIsrRequest$.readFrom(LeaderAndIsrRequest.scala:108) kafka_1 | at kafka.api.RequestKeys$$anonfun$5.apply(RequestKeys.scala:43) kafka_1 | at kafka.api.RequestKeys$$anonfun$5.apply(RequestKeys.scala:43) kafka_1 | at kafka.network.RequestChannel$Request.<init>(RequestChannel.scala:50) kafka_1 | at kafka.network.Processor.read(SocketServer.scala:450) kafka_1 | at kafka.network.Processor.run(SocketServer.scala:340) kafka_1 | at java.lang.Thread.run(Thread.java:701) 

有什么根本上错误的设置? 谢谢

什么时候发生这个错误,运行wurstmeister/zookeeper映像,或者当你尝试产生或使用消息。

为什么它报告Closing socket for /192.168.59.3 ,应该是192.168.59.103 ,你可以尝试ping或telnet在你运行生产者和消费者的地方,看看你是否可以连接到它的卡夫卡服务器。