如果偏移量在 Kafka 中损坏会怎样?

What happens if offsets get corrupted in Kafka?

我们如何处理偏移损坏?

我想将偏移量日志保存在其他地方或者拍摄偏移量的快照。我该怎么做?

Kafka 在名为 _consumer_offsets 的主题中存储偏移量。消费者将偏移量提交到该主题中,auto.offset.reset(earliest/latest/none)的值决定了开始从分区读取消息的策略。偏移量日志保留由代理属性指定。

auto.offset.reset = latest => 将从最后提交的偏移量开始读取消息,如果未找到则它将等待新消息到达并从那里开始。没有抛出异常

auto.offset.reset = earliest => 同样,它不会抛出任何异常,如果存在偏移量,它将从头开始读取消息。

auto.offset.reset = none => 找不到偏移量时会抛出异常。

您可以使用 assign 和 seek 来获取特定数据

        //assign - set topic and partition you you want to read from using TopicPartion
        TopicPartition topicPartitionToReadFrom = new 
        TopicPartition(topic, 0);
        long offsetToReadFrom = 15L;
        consumer.assign(Arrays.asList(topicPartitionToReadFrom));
        
        //seek - set position of the consumer manually by calling
        //KafkaConsumer.seek(TopicPartition partition, long offset)
        consumer.seek(topicPartitionToReadFrom, offsetToReadFrom);
        

存储偏移量日志 => _consumer_offsets 是主题,因此您可以 并将消息存储到您选择的存储中。