Kafka经纪人可以在没有连接消费者的情况下保留消息吗?

时间:2017-03-10 02:42:25

标签: java apache-kafka messagebroker

我正在尝试构建一个 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经纪人保留消息?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:4)

--from-beginning附加到控制台使用者命令,以使其从最早的偏移开始消耗。这实际上是关于偏移重置策略,它由config auto.offset.reset控制。以下是此配置的含义:

  

当Kafka中没有初始偏移量或者服务器上不再存在当前偏移量时(例如因为该数据已被删除)该怎么办:

     

earliest:自动将偏移重置为最早的偏移量

     

latest:自动将偏移重置为最新偏移量

     

none:如果没有找到消费者组的先前偏移量,则向消费者抛出异常   其他:向消费者抛出异常。