Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
kafka java客户端未消费-仅挂起在consumer.poll_Java_Apache Kafka_Kafka Consumer Api - Fatal编程技术网

kafka java客户端未消费-仅挂起在consumer.poll

kafka java客户端未消费-仅挂起在consumer.poll,java,apache-kafka,kafka-consumer-api,Java,Apache Kafka,Kafka Consumer Api,我正在阅读Manning的《统一日志处理》一书,它的第一个练习是Java中的一个简单kafka使用者。程序在运行时只是在调用consumer.poll()的地方暂停 我在这本书作者提供的valgrind环境中运行它,可以在git clone上找到它https://github.com/alexanderdean/Unified-Log-Processing.git 它有zookeeper-3.4.6和kafka_2.10-0.8.2.1 我使用以下命令行创建了一个主题: ./kafka-topi

我正在阅读Manning的《统一日志处理》一书,它的第一个练习是Java中的一个简单kafka使用者。程序在运行时只是在调用
consumer.poll()
的地方暂停

我在这本书作者提供的valgrind环境中运行它,可以在git clone上找到它https://github.com/alexanderdean/Unified-Log-Processing.git

它有
zookeeper-3.4.6
kafka_2.10-0.8.2.1

我使用以下命令行创建了一个主题:

./kafka-topics.sh --create --topic raw --zookeeper localhost:2181 --replication-factor 1 --partitions 1
Created topic "raw".
kafka控制台生产者
kafka控制台消费者
按预期工作

./kafka-console-producer.sh --topic raw --broker-list localhost:9092
[2016-10-17 14:09:05,899] WARN Property topic is not valid (kafka.utils.VerifiableProperties)
one
two
three
four
five


./kafka-console-consumer.sh --topic raw --from-beginning --zookeeper localhost:2181
one
two
three
four
five
^CConsumed 5 messages
我正在测试的java代码非常基本,只是创建了一个使用者

StreamApp.java

package nile;

public class StreamApp {                                                        

    public static void main(String[] args){                                     
        String servers   = args[0];                                             
        String groupId   = args[1];
        String inTopic   = args[2];
        String goodTopic = args[3];                                             

        Consumer consumer = new Consumer(servers, groupId, inTopic);            
        consumer.run();                                            
    }                                                                           
}
Consumer.java

package nile;

import java.util.*;

import org.apache.kafka.clients.consumer.*;

public class Consumer {                                                                                                                                                                                            

    private final KafkaConsumer<String, String> consumer;             // a                                                                                                                                         
    private final String topic;                                                                                                                                                                                    

    public Consumer(String servers, String groupId, String topic) {                                                                                                                                                
        this.consumer = new KafkaConsumer<String, String>(createConfig(servers, groupId));                                                                                                                         
        this.topic = topic;                                                                                                                                                                                        
        System.out.println("Topic to listen for:" + this.topic + ":");                                                                                                                                             
    }                                                                                                                                                                                                              

    public void run() {                                                                                                                                                                                            
        System.out.println("Starting  to listen for items ");                                                                                                                                                      
        this.consumer.subscribe(Arrays.asList(this.topic));             // b                                                                                                                                       
        try {                                                                                                                                                                                                      
            while (true) {                                                                                                                                                                                         
                System.out.println("Subscribed to: " + consumer.subscription());                                                                                                                                   
                System.out.println("Inside the loop");                                                                                                                                                             
                ConsumerRecords<String, String> records = consumer.poll(100); // c                                                                                                                                 
                System.out.println("After consuming");                                                                                                                                                             
                for (ConsumerRecord<String, String> record : records) {                                                                                                                                            
                    System.out.println("Got an item from kafka: " + record.value());                                                                                                                               
                }                                                                                                                                                                                                  
            }                                                                                                                                                                                                      
        } finally {                                                                                                                                                                                                
            consumer.close();                                                                                                                                                                                      
        }                                                                                                                                                                                                          
    }                                                                                                                                                                                                              

    private static Properties createConfig(String servers, String groupId) {                                                                                                                                       

        Properties props = new Properties();                                                                                                                                                                       
        props.put("bootstrap.servers", servers);                                                                                                                                                                   
        props.put("group.id", groupId);                                 // e                                                                                                                                       
        props.put("enable.auto.commit", "true");                                                                                                                                                                   
        props.put("auto.commit.interval.ms", "1000");                                                                                                                                                              
        props.put("auto.offset.reset", "earliest");                                                                                                                                                                
        props.put("session.timeout.ms", "30000");                                                                                                                                                                  
        props.put("key.deserializer",                                                                                                                                                                              
                  "org.apache.kafka.common.serialization.StringDeserializer");  // a                                                                                                                               
        props.put("value.deserializer",                                                                                                                                                                            
                  "org.apache.kafka.common.serialization.StringDeserializer");  // a                   
        return props;                                                                                                                                                                                              
    }                                                                                                                                                                                                              
}
我以以下方式运行代码:

java -jar ./build/libs/nile-0.1.0.jar localhost:9092 ulp-ch03-3.3 raw enriched
输出为:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Topic to listen for:raw:
Starting  to listen for items
Subscribed to: [raw]
Inside the loop

这就是它停止的地方。
consumer.poll()
没有返回任何内容,也没有超时。不知道这里出了什么问题。我已经剪了两天的头发了,如果能帮我把头发理好,我将不胜感激。:)

您似乎正在使用0.9.x使用者API来使用来自0.8.x服务器的消息,这是不允许的,因为0.9.0.0与以前的版本相比有代理间协议更改。
使用旧的使用者(即Scala使用者)或将kafka服务器版本升级到0.9.x

谢谢!我升级了卡夫卡,现在程序运行得很好。
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Topic to listen for:raw:
Starting  to listen for items
Subscribed to: [raw]
Inside the loop