我正在尝试构建一个 pub / sub 应用程序,我正在探索那里最好的工具。我目前正在查看 Kafka 并且已经运行了一个小型演示应用。但是,我遇到了一个概念问题。
我有一个制作人( Java 代码):
String topicName = "MyTopic;
String key = "MyKey";
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092,localhost:9093");
props.put("acks", "all");
props.put("key.serializer","org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.ByteArraySerializer");
Producer<String, byte[]> producer = new KafkaProducer <String, byte[]>(props);
byte[] data = <FROM ELSEWHERE>;
ProducerRecord<String, byte[]> record = new ProducerRecord<String, byte[]>(topicName, key, data);
try {
RecordMetadata result = producer.send(record).get();
}
catch (Exception e) {
// Nothing for now
}
producer.close();
当我通过Kakfa命令行工具启动使用者时:
kafka-console-consumer --bootstrap-server localhost:9092 --topic MyTopic
然后我执行生产者代码,我看到数据消息显示在我的消费者终端上。
然而,如果我不在执行生产者之前运行消费者,则会显示消息&#34;丢失&#34;。当我启动消费者时(在执行生产者之后),消费者终端中没有任何内容。
有没有人知道在没有连接消费者的情况下是否可以让Kafka经纪人保留消息?如果是这样,怎么样?
答案 0 :(得分:4)
将--from-beginning
附加到控制台使用者命令,以使其从最早的偏移开始消耗。这实际上是关于偏移重置策略,它由config auto.offset.reset
控制。以下是此配置的含义:
当Kafka中没有初始偏移量或者服务器上不再存在当前偏移量时(例如因为该数据已被删除)该怎么办:
earliest
:自动将偏移重置为最早的偏移量
latest
:自动将偏移重置为最新偏移量
none
:如果没有找到消费者组的先前偏移量,则向消费者抛出异常 其他:向消费者抛出异常。