在我的示例程序中,我尝试发布一个文件并尝试立即使用它。但我的消费者迭代器返回null。 知道我做错了吗?
测试
**main(){**
KafkaMessageProducer producer = new KafkaMessageProducer(topic, file);
producer.generateMessgaes();
MessageListener listener = new MessageListener(topic);
listener.start();
}
消息监听
public void start() {
Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
topicCountMap.put(topic, new Integer(CoreConstants.THREAD_SIZE));
Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = consumerConnector
.createMessageStreams(topicCountMap);
List<KafkaStream<byte[], byte[]>> streams = consumerMap.get(topic);
executor = Executors.newFixedThreadPool(CoreConstants.THREAD_SIZE);
for (KafkaStream<byte[], byte[]> stream : streams) {
System.out.println("The stream is --"+ stream.iterator().makeNext().topic());
executor.submit(new ListenerThread(stream));
}
try { // without this wait the subsequent shutdown happens immediately before any messages are delivered
Thread.sleep(10000);
} catch (InterruptedException ie) {
}
if (consumerConnector != null) {
consumerConnector.shutdown();
}
if (executor != null) {
executor.shutdown();
}
}
ListenerThread
public class ListenerThread implements Runnable {
private KafkaStream<byte[], byte[]> stream;
public ListenerThread(KafkaStream<byte[], byte[]> msgStream) {
this.stream = msgStream;
System.out.println("----------" + stream.iterator().makeNext().topic());
}
public void run() {
try {
ConsumerIterator<byte[], byte[]> it = stream.iterator();
while (it.hasNext()) {
// MessageAndMetadata<byte[], byte[]> messageAndMetadata =
// it.makeNext();
// String topic = messageAndMetadata.topic();
// byte[] message = messageAndMetadata.message();
System.out.println("111111111111111111111111111");
FileProcessor processor = new FileProcessor();
processor.processFile("LOB_TOPIC", it.next().message());
}
在上面的迭代器中,它不会在循环中进入,因为迭代器为null。但我确信我正在向同一主题发布单个消息,消费者会听取该主题。
任何帮助将不胜感激
答案 0 :(得分:1)
昨天我遇到了同样的问题。在尝试使用它一段时间后,我无法从我当前的主题中读取它。所以我采取了以下步骤
一个。停止了我的消费者,
湾停止了制作人,
℃。停止了kafka服务器 bin / zookeeper-server-stop.sh config / zookeeper.properties
d。停了动物园管理员 bin / zookeeper-server-stop.sh config / zookeeper.properties
之后我删除了我的主题。 bin / kafka-topics.sh --delete --zookeeper localhost:2181 - topic test
我还删除了通过“设置多代理群集”创建的文件,但我认为它不会产生问题。
一个。启动了Zookeeper 湾开始了卡夫卡 C。开始制作人并向Kafka发送一些消息
它再次开始工作了。我不确定这是否会对你有所帮助。但似乎我的生产者必须与消费者脱节。希望这可以帮助。