高级卡夫卡消费者api无法正常工作

时间:2016-06-15 09:59:09

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

我设置了单个节点kafka并尝试了一个简单的pub / sub模式:

从我的笔记本电脑我通过代码生成一些消息:

    Properties props = new Properties();
    props.put("bootstrap.servers", "192.168.23.152:9092");
    props.put("acks", "all");
    props.put("retries", 0);
    props.put("batch.size", 16384);
    props.put("linger.ms", 1);
    props.put("buffer.memory", 33554432);
    props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
    props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

    Producer<String, String> producer = new KafkaProducer<>(props);
    for (int i = 0; i < 10; i++)
        producer.send(new ProducerRecord<String, String>("tp3", Integer.toString(i), "hello " + Integer.toString(i)));

    producer.close();

我还写了一个简单消费者:

    Properties props = new Properties();
    props.put("bootstrap.servers", "192.168.23.152:9092");
    props.put("group.id", "g1");
    props.put("client.id","client1");
    props.put("enable.auto.commit", "true");
    props.put("auto.commit.interval.ms", "1000");
    props.put("auto.offset.reset", "latest");
    props.put("session.timeout.ms", "30000");
    props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
    props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
    KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
    consumer.subscribe(Arrays.asList("tp3"));
    while (true) {
        ConsumerRecords<String, String> records = consumer.poll(100);
        for (ConsumerRecord<String, String> record : records)
            System.out.printf("offset = %d, key = %s, value = %s", record.offset(), record.key(), record.value());
        TimeUnit.SECONDS.sleep(1000);
    }

但消费者没有检索任何东西

任何人都请向我解释发生了什么? 我&#39;我确定生产者工作得很好,因为我使用console命令来检索消息并且它工作得很好(我在这里附上了经过验证的图像) enter image description here

任何帮助表示赞赏:( :( :(

1 个答案:

答案 0 :(得分:0)

根据卡夫卡FAQ

  

为什么我的消费者永远不会获得任何数据?

     

默认情况下,当消费者第一次启动时,它会忽略主题中的所有现有数据,并且只会消耗消费者启动后进入的新数据。如果是这种情况,请尝试在启动使用者后再发送一些数据。或者,您可以通过将auto.offset.reset设置为0.9的新消费者和旧消费者的“最小”消费者来配置消费者。