【问题标题】:Kafka setup with docker using kafka-rb for clients使用 kafka-rb 为客户端使用 docker 设置 Kafka
【发布时间】:2016-10-05 13:28:35
【问题描述】:

我对 Kafka 完全不熟悉,但我无法正确使用它。

我使用 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​​ gem "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

消费者:

需要“卡夫卡”

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)

设置是否存在根本问题?谢谢

【问题讨论】:

  • 您的消费者是否也应该连接到 Zookeeper,而不是 Kafka?
  • 其实我需要连接到 Zookeeper,但是我使用了错误的库。因为这个并没有真正照顾中间的 Zookeeper,但这个却可以:github.com/joekiller/jruby-kafka

标签: ruby docker boot2docker apache-kafka


【解决方案1】:

这个错误是什么时候发生的,运行wurstmeister/zookeeper 图像或者当你尝试产生或消费消息时。

为什么会报Closing socket for /192.168.59.3,应该是192.168.59.103,能不能在你运行producer和consumer的地方尝试ping或者telnet kafka服务器看看能不能连接上。

【讨论】:

    猜你喜欢
    • 2017-08-20
    • 2020-05-19
    • 2021-06-08
    • 1970-01-01
    • 2021-11-30
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    相关资源
    最近更新 更多