簡體   English   中英

沒有消費者連接時,Kafka經紀人可以保留消息嗎?

[英]Can a Kafka broker retain messages while there are no consumers connected?

我正在嘗試構建發布/訂閱應用程序,並且正在探索最好的工具。 我目前正在查看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

然后執行生產者代碼,我在用戶終端上看到數據消息。

但是 ,如果我在執行生產者之前運行消費者,則消息顯示為“丟失”。 當我啟動使用者(執行生產者之后)時,使用者終端中什么也沒有出現。

沒有人知道在沒有消費者連接的情況下是否可以讓Kafka經紀人保留消息嗎? 如果是這樣,怎么辦?

--from-beginning附加到控制台使用者命令,以使其從最早的偏移量開始消耗。 這實際上是關於由config auto.offset.reset控制的偏移量重置策略。 這是此配置的含義:

當Kafka中沒有初始偏移量或服務器上不再存在當前偏移量時(例如因為該數據已被刪除),該怎么辦:

earliest :將偏移量自動重置為最早的偏移量

latest :自動將偏移量重置為最新偏移量

none :如果未找到使用者組的先前偏移量,則向使用者引發異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM