Kafka Java Consumer API问题

时间:2015-12-28 01:18:29

标签: java apache-kafka kafka-consumer-api

我正在尝试使用Kafka java API消费消息。能够使用kafka-console-consumer.bat消费消息。但是,不能消耗来自java api的消息。没有收到任何错误或任何消息。帮助我做错了什么。

import kafka.consumer.Consumer;
import kafka.consumer.ConsumerConfig;
import kafka.consumer.ConsumerIterator;
import kafka.consumer.KafkaStream;
import kafka.javaapi.consumer.ConsumerConnector;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

public class SimpleConsumer {
    private final ConsumerConnector consumer;
    private final String topic;

    public SimpleConsumer(String zookeeper, String groupId, String topic) {
        Properties props = new Properties();
        props.put("zookeeper.connect", zookeeper);
        props.put("group.id", groupId);
        props.put("zookeeper.session.timeout.ms", "500");
        props.put("zookeeper.sync.time.ms", "250");
        props.put("auto.commit.interval.ms", "1000");

        consumer = Consumer.createJavaConsumerConnector(new ConsumerConfig(props));
        this.topic = topic;
    }

    public void testConsumer() {
        Map<String, Integer> topicCount = new HashMap<String, Integer>();
        topicCount.put(topic, 1);
        Map<String, List<KafkaStream<byte[], byte[]>>> consumerStreams = consumer.createMessageStreams(topicCount);
        List<KafkaStream<byte[], byte[]>> streams = consumerStreams.get(topic);
        for (final KafkaStream stream : streams) {
            ConsumerIterator<byte[], byte[]> it = stream.iterator();
            while (it.hasNext()) {
                System.out.println("Message from Single Topic: " + new String(it.next().message()));
            }
        }
        if (consumer != null) {
            consumer.shutdown();
        }
    }

    public static void main(String[] args) {
        String topic = "test";
        SimpleConsumer simpleHLConsumer = new SimpleConsumer("localhost:2181", "testgroup", topic);
        simpleHLConsumer.testConsumer();
    }
}

CONSOLE COMMAND

kafka-console-consumer.bat --zookeeper localhost:2181 - topic test - from-beginning

创建主题 kafka-topics.bat --create --zookeeper localhost:2181 --rerelication-factor 1 --partitions 3 --topic test 。  使用 kafka-console-producer.bat --broker-list localhost:9092 --topic test 发布消息, 如果我运行消费者程序,登录Broker控制台 [2015-12-29 11:57:34,448] INFO关闭/ IP连接套接字(kafka.network.Processor)

如果我关闭程序获取此日志** java.io.IOException:远程主机强行关闭现有连接        **。请帮助我为什么我不能消费来自上述程序的消息。

但是,能够使用 kafka-console-consumer.bat --zookeeper localhost:2181 --topic test --from-beginning 来使用消息。帮帮我

1 个答案:

答案 0 :(得分:2)

如果您想从头开始阅读消息,则需要设置选项

auto.offset.reset=smallest

默认为“最大”。

http://kafka.apache.org/documentation.html

  

当ZooKeeper中没有初始偏移量或者是否存在时,该怎么办?   偏移量超出范围:

     
      
  • 最小:自动将偏移重置为最小偏移量
  •   
  • 最大:自动将偏移重置为最大偏移量
  •   
  • 其他任何事情:向消费者抛出异常
  •   

注意:此选项适用于新的消费者API(自0.9.0.0起):

auto.offset.reset=earliest|latest|none

您的group.id已在zookeeper中保存了偏移量。所以,如果你想看到消息改变group.id或清理zookeeper