我正在将输入的JSON数据发送到Kafka主题。通过使用以下命令,我可以在kafka使用者中看到相同的JSON数据。
.\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic mytopic --from-beginning
案例1:
但是,当我尝试从kafka使用者(java)读取记录时,在Java控制台中没有任何记录。我已经尝试过此链接https://kafka.apache.org/090/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html中给出的示例
案例2: 如果我从生产者(命令窗口)发送任何消息,则在消费者(命令窗口)中获得相同的消息。并能够在Java控制台中看到相同的记录。此方案正在工作。
如果我通过java程序将数据提交给主题。然后,相同的JSON数据出现在使用者(命令窗口)中。但是没有进入Java控制台。Case1无法正常工作。
Case2在正常工作。请让我知道需要进行任何配置吗?
答案 0 :(得分:0)
您需要设置ConsumerConfig.AUTO_OFFSET_RESET_CONFIG以便从头开始读取。
kafkaConsumerProperties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,"earliest");
还要确保您没有使用相同的使用者组ID运行不同的使用者进程,因为一个分区中的数据可能是从一个进程中读取的,而另一个分区则看不到任何东西。
答案 1 :(得分:0)
假定生产者和消费者代码正确。
$ KAFKA_HOME / bin / kafka-consumer-groups.sh --bootstrap-服务器 本地主机:9092 --group group_name --topic topic_name --reset-offsets -最早-执行
这应该可以解决您的问题。
以下是一些卡夫卡消费者的财产:
bootstrap.servers: 'localhost:9092'
group.id: 'group_id'
auto.offset.reset: 'earliest'
key.deserializer: 'org.apache.kafka.common.serialization.*' //Replace * with class
value.deserializer: 'org.apache.kafka.common.serialization.*'
谢谢
答案 2 :(得分:0)
您需要确保您没有在最后发送空行,而仅消耗latest
-与上述一样使用auto.offset.reset: 'earliest'
或properties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
然后,
consumer.seekToBeginning(consumer.assignment());
确定。