我在scala中写过kafka使用者。当我运行消费者时,它在控制台上显示为空白。 我使用下面的代码:
val topicProducer = "testOutput"
val props = new Properties()
props.put("bootstrap.servers","host:9092,host:9092")
props.put("key.deserializer","org.apache.kafka.common.serialization.StringDeserializer")
props.put("value.deserializer","org.apache.kafka.common.serialization.StringDeserializer")
props.put("group.id", "test");
val kafkaConsumer = new KafkaConsumer[String, String](props)
val topic = Array("test").toList
kafkaConsumer.subscribe(topic)
val results = kafkaConsumer.poll(2000)
for ((record) <- results) {
producer.send(new ProducerRecord(topicProducer,"key","Value="+record.key()+" Record Key="+record.value()+"append"))
}
答案 0 :(得分:0)
您还需要指定auto.offset.reset
属性,以便您的使用者能够从头开始使用消息(相当于命令行中的--from-beginning
)
props.put("auto.offset.reset", "earliest");
根据Kafka docs:
<强> auto.offset.reset 强>
当ZooKeeper中没有初始偏移量或者是否存在时,该怎么办? 偏移量超出范围:
- 最小:自动将偏移重置为最小偏移量
- 最大:自动将偏移重置为最大偏移量
- 其他任何事情:向消费者抛出异常
修改强>
或者,如果您使用旧的使用者API,则使用zookeeper参数bootstrap-server host:9092
代替--zookeeper host:2181
。
如果这不能解决问题,请尝试删除zookeeper中的/brokers
bin/zookeeper-shell <zk-host>:2181
并重新启动kafka节点
rmr /brokers