diff --git a/mq/kafka/kafka-尚硅谷.md b/mq/kafka/kafka-尚硅谷.md index 6c434f6..68954f2 100644 --- a/mq/kafka/kafka-尚硅谷.md +++ b/mq/kafka/kafka-尚硅谷.md @@ -420,10 +420,19 @@ rebalance通常有两个阶段,`revocation`和`assignment`,即撤销当前 通常情况下,commitAsync相较commitSync是更不安全的,在宕机之前提交失败将会造成消息的重复消费。可以通过在回调中使用commitSync来减轻消息的重复消费风险。 +##### kafka消费起始offset +通过`auto.offset.reset`属性,可以配置当kafka broker中没有存储分区与特定消费者组offset关系时,消费者消费的行为,其可配置值如下: +- earliest:从分区最开始的位置进行消费 +- latest:默认值为latest,当offset不存在时,从最新的offset开始消费 +- none:当消费者组针对该分区没有找到offset记录时,抛出异常 +默认情况下,`auto.offset.reset`值为latest,故而当消费者组新订阅一个topic时,并不会从头开始消费分区中的历史消息,而是从分区最新offset开始,消费后续分区接收到的消息。 +> ##### 自定义分区起始消费offset +> 除了配置上述属性指定消费起始位置外,还可以通过`KafkaConsumer#seek`接口来指定起始消费分区的offset位置。 +> #### 消费指定时间开始的消息 +> 如果在消费消息时,想要消费从指定时刻之后的消息,可以通过`kafkaConsumer#offsetsForTimes`接口,能根据传入的分区和时间戳来得到该分区下指定时刻消息的起始offset,返回offset为时间戳大于或等于指定时间戳的第一条消息对应offset - - - +##### exactly-once语义 +如果想要保证broker中消息不会被kafka漏消费或是重复消费,可以通过事务来保证每条消息只会被消费一次。