【发布时间】:2016-10-26 00:47:39
【问题描述】:
我正在尝试创建一个简单的 KafkaProducer 和 KafkaConsumer,以便我可以将数据发送到代理上的主题,然后验证是否收到了数据。我有以下两种方法来定义我的消费者和生产者,以及我如何发送消息。 send 方法至少需要 20 秒才能完成,据我所知,consumer.poll 方法从未真正完成,但我离开的最长时间是 10 分钟。
有人对我做错了什么有建议吗?生产者/消费者是否有一些我没有正确设置的属性?这些属性是直接从文档中复制的,所以我不明白为什么它们不起作用。
KafkaProducer docs
KafkaConsumer docs
"verify we can send to producer" in {
val consumer = createKafkaConsumer("address:9002")
val producer = createKafkaProducer("address:9002")
val message = "I am a message"
val record = new ProducerRecord[String, String]("myTopic", message)
producer.send(record)
TimeUnit.SECONDS.sleep(5)
val records = consumer.poll(5000)
println("records: "+records)
consumer1.close()
}
def createKafkaProducer(kafka: String): KafkaProducer[String,String] = {
val props = new Properties()
props.put("bootstrap.servers", kafka)
props.put("acks", "all")
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer")
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer")
new KafkaProducer[String,String](props)
}
def createKafkaConsumer(kafka: String): KafkaConsumer[String, String] = {
val props = new Properties()
props.put("bootstrap.servers", kafka)
props.put("group.id", "test")
props.put("enable.auto.commit", "true")
props.put("auto.commit.interval.ms", "1000")
props.put("session.timeout.ms", "30000")
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
val consumer = new KafkaConsumer[String, String](props)
consumer.subscribe(Collections.singletonList("myTopic"))
consumer
}
编辑:我已经更新了我的代码,以便我现在可以从 send 方法中获得响应,而且似乎 org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms. 会超时
【问题讨论】:
-
你要关闭制片人了吗?
-
不,我不是,这是一件好事。
-
您是否在运行代码之前创建了主题?
-
是的,这个话题确实存在
标签: java scala apache-kafka