我是卡夫卡的新手。在尝试一些时,我面临两个问题。如果有人可以建议如何理解这一点,那将会有很大的帮助。
当我从Eclipse运行Kafka时,当我运行Producer Code时,我能够通过从控制台' kafka-console-consumer运行使用者脚本来查看我发送给Kafka Broker的内容。 sh' 。但是,当我从Eclipse运行Consumer脚本时,我无法在Eclipse控制台上看到任何内容。这是我在Eclipse中运行的消费者代码。在我的制作人代码中,我刚刚将一个值(一个字符串)发送到了与Consumer脚本中显示的相同主题。当我正在进行"作为Java应用程序运行时,我无法看到相同的值"在消费者脚本上。
public class SimpleConsumer {
public static void main(String[] args)
{
String topicName = "SimpleProducerTopic";
String groupName = "SimpleGroup";
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", groupName);
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(topicName));
while(true)
{
ConsumerRecords<String,String> records = consumer.poll(2);
for(ConsumerRecord<String,String> rec : records)
{
System.out.println("Value :" + String.valueOf(rec.value()));
}
}
consumer.close();
}
}
我怀疑的第二件事是: 在生产者中,当我发送一些数据时,这些数据会累积在代理中,每次执行我的消费者脚本时,我都会得到累积结果。但是我想要这样的东西:
首次执行:
第二次执行:
但我得到的是:
首次执行:
第二次执行:
我检查了Quora上的资源,解决此问题的一种方法是减少数据在配置中持续存在的时间。然而,由于这不是一个好习惯,我想知道是否有一种方法可以阻止消费者消费它在上次投票中消耗的东西。
答案 0 :(得分:0)
关于第一个问题,请确保正确设置topicName
,groupName
和bootstrap.servers
。另外String.valueOf(rec.value())
也是多余的,因为rec.value()
已经有String
类型。
关于第二个问题,在启动控制台消费者(--consumer-property group.id=your_group
)时,是否为“执行”设置了相同的组?如果没有,则每个新执行将创建一个新组,该组将从头开始读取主题。