2017-07-25 71 views
0

超出保留期限的主题行为是什么?在他们的保留期限之后可以写信给他们吗?我一直在试图写信给他们confluent-kafka-dotnet(一个.NET库)但是当我运行一个消费者时,我没有看到任何消息流过。分区的值只是一个空字符串数组。是否可以写入超过保留时间的主题或该主题是否被禁用?卡夫卡能够写入超过保留期限的主题

using (var consumer = new Consumer(config)) 
{ 
    consumer.Assign(new List<TopicPartitionOffset> { new TopicPartitionOffset(topicName, 0, 0) }); 

    while (true) 
    { 
     Message msg; 
     if (consumer.Consume(out msg)) 
     { 
      Console.WriteLine("Topic: {0} Response: P{1},O{1} :{3}", msg.Topic, msg.Partition, msg.TopicPartitionOffset, Encoding.UTF8.GetString(msg.Value)); 
     } 
    } 
} 

回答

1

卡夫卡的保留期适用于过去的事件,而不是您现在正在编写的事件。无论您的保留策略是什么,您都应该能够看到新消息。

示例: 24小时保留的主题是在7月1日午夜创建的。 7月1日23:50,您在整个一天写下的所有数据仍然存在。 7月2日凌晨1点,只有7月1日凌晨1点之后写入的数据将被存储(过去24小时),以前的事件将被“清除”。

如果您的消费者看不到新消息,它是以下两种消息之一: 1.您的消息是否被写入? (Kafka有一个文件转储实用程序来帮助检查) 2.您的消费者什么时候开始阅读?如果您的消费者在主题结尾处开始,则可能会错过之前的消息。如果它从头开始,它将获得主题中的所有消息。 “auto.offset.reset”配置控制这一点。 “ - 从头开始​​”如果您使用控制台使用者。