轮询函数Java Kafka Consumer出错
这是我的消费类课程。Alaways我在poll函数“KafkaConsumer类型中的poll(long)方法不适用于参数(Duration)”和获取记录“只能迭代java.lang.Iterable的数组或实例”上出错。我正在使用JDK1.8轮询函数Java Kafka Consumer出错,java,apache-kafka,kafka-consumer-api,Java,Apache Kafka,Kafka Consumer Api,这是我的消费类课程。Alaways我在poll函数“KafkaConsumer类型中的poll(long)方法不适用于参数(Duration)”和获取记录“只能迭代java.lang.Iterable的数组或实例”上出错。我正在使用JDK1.8 import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.consumer.ConsumerRecord; import or
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.common.serialization.StringDeserializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.time.Duration;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
public class KaConsumer {
public static void main(String[] args) {
Logger logger= LoggerFactory.getLogger(KaConsumer.class.getName());
String bootstrapServers="127.0.0.1:9092";
String grp_id="My_App";
String topic="Tweet01";
Properties properties=new Properties();
properties.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,bootstrapServers);
properties.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
properties.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,StringDeserializer.class.getName());
properties.setProperty(ConsumerConfig.GROUP_ID_CONFIG,grp_id);
properties.setProperty(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,"earliest");
//creating consumer
KafkaConsumer<String,String> Consumer = new KafkaConsumer<String,String>(properties);
Consumer.subscribe("Tweet01");
while (true) {
ConsumerRecords<Integer,String> records=Consumer.poll(Duration.ofMillis(100));
for(ConsumerRecord<String,String> record: records){
System.out.println(record);
}
}
}
}
import org.apache.kafka.clients.consumer.ConsumerConfig;
导入org.apache.kafka.clients.consumer.ConsumerRecord;
导入org.apache.kafka.clients.consumer.ConsumerRecords;
导入org.apache.kafka.clients.consumer.KafkaConsumer;
导入org.apache.kafka.common.serialization.StringDeserializer;
导入org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
导入java.time.Duration;
导入java.util.array;
导入java.util.Collections;
导入java.util.HashMap;
导入java.util.Map;
导入java.util.Properties;
公共类消费者{
公共静态void main(字符串[]args){
Logger Logger=LoggerFactory.getLogger(KaConsumer.class.getName());
字符串bootstrapserver=“127.0.0.1:9092”;
字符串grp\u id=“我的应用程序”;
字符串topic=“Tweet01”;
属性=新属性();
setProperty(ConsumerConfig.BOOTSTRAP\u SERVERS\u CONFIG,bootstrapserver);
properties.setProperty(ConsumerConfig.KEY_反序列化器_CLASS_CONFIG,StringDeserializer.CLASS.getName());
properties.setProperty(ConsumerConfig.VALUE_反序列化程序_CLASS_CONFIG,StringDeserializer.CLASS.getName());
setProperty(ConsumerConfig.GROUP\u ID\u CONFIG,grp\u ID);
设置属性(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,“最早”);
//创造消费者
卡夫卡消费者=新卡夫卡消费者(财产);
消费者订阅(“Tweet01”);
while(true){
ConsumerRecords记录=Consumer.poll(持续时间:百万分之一百);
对于(消费者记录:记录){
系统输出打印项次(记录);
}
}
}
}
注意您的消费者记录
而不是
KafkaConsumer类型中的方法轮询(长)不适用于参数(持续时间)'
错误告诉您将持续时间.ofMillis(100)
替换为100
。如果要使用Duration,可以升级客户端版本
只能迭代java.lang.Iterable的数组或实例
for循环看起来不错,ConsumerRecords
确实实现了Iterable接口,但键中存在类型不匹配
FWIW,如果目的是只打印记录,我建议卡夫卡流或其他更高级别的库