我尝试创建一个简单的KafkaProducer和KafkaConsumer,这样我就可以将数据发送到代理上的主题,然后验证是否收到了数据。我有两种方法,我用来定义我的消费者和制作人,以及我如何发送消息。发送方法至少需要20秒才能完成,而且我可以告诉使用者.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.
答案 0 :(得分:1)
原来我遇到了DNS问题,这意味着我实际上并没有连接到代理。修复此问题允许消息通过,配置没有任何问题。