使用Java KafkaConsumer

时间:2017-07-22 20:50:56

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

我希望有人可以解释我的问题。

我正在对我建立的微服务进行一系列REST调用。当服务接收到调用时,它会将一些数据保存到数据库,然后将消息发布到Kafka主题。

我正在尝试编写一个进行REST调用的测试,然后使用来自Kafka主题的消息。

当我的测试试图从Kafka消费时,它似乎没有消耗最新消息。

我使用了Kafka附带的kafka-consumer-groups.sh shell脚本来描述我的消费者的状态。这是它的样子:

bash-4.3# ./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group test
Note: This will only show information about consumers that use the Java consumer API (non-ZooKeeper-based consumers).

Consumer group 'test' has no active members.

TOPIC         PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG  CONSUMER-ID  HOST  CLIENT-ID
test_topic    0          42              43              1    -            -     -

注意滞后1.这似乎是我的问题。

这是我的Kafka消费者代码:

public void consumeMessages() {
    Properties props = new Properties();
    props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
    props.put(ConsumerConfig.GROUP_ID_CONFIG, "test");
    props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
    props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());

    try (KafkaConsumer < String, String > kafkaConsumer = new KafkaConsumer < > (props)) {
        kafkaConsumer.subscribe(Collections.singletonList("test_topic"));
        ConsumerRecords < String, String > consumerRecords = kafkaConsumer.poll(5000);
        for (ConsumerRecord < String, String > consumerRecord: consumerRecords) {
            System.out.printf("offset = %d, message = %s%n", consumerRecord.offset(), consumerRecord.value());
        }
    }
}

任何帮助都将受到极大的欢迎。

谢谢,

Ben:)

0 个答案:

没有答案