Kafka和时间戳在单个主题分区内的获取时间排序

时间:2019-01-20 19:49:58

标签: apache-kafka timestamp

当仅从位于Kafka主题中的单个分区中读取消息时,其中为接收(代理)时间配置了时间戳,我是否可以假定从该分区检索到的所有消息始终按照严格的时间戳顺序排列?

2 个答案:

答案 0 :(得分:1)

Kafka在存储和检索消息时提供顺序保证,即,按照消息发送的顺序存储和检索消息。 生产者发送到特定主题分区的消息将按其发送顺序附加。也就是说,如果一条记录M1与记录M2由同一生产者发送,并且首先发送M1,则M1的偏移量(以及较低的时间戳)将比M2低,并且在日志中更早出现。

使用者实例按记录在日志中的存储顺序查看记录。

但是, Kafka仅提供分区中记录的总顺序,而不提供主题中不同分区之间的记录的总顺序。但是,如果您需要对记录的总订购量,则可以通过只有一个分区的主题来实现,尽管这将意味着每个消费者组只有一个消费者进程(不建议)。使用这个类比,如果您只有1个分区,则对您的用例来说是肯定的,但是如果有更多的分区,那么对于每个分区的排序又是肯定的,但是不能保证在整个主题(多个分区)中排序。 / p>

答案 1 :(得分:0)

是的,我在谈论一个Kafka主题,它被明确配置为日志附加时间。

我假设由于代理确定时间戳,并且代理拥有特定分区,因此该分区中的时间戳将反映时间戳顺序。

重新解释这个问题,在为日志附加时间配置的单个分区中,这始终是正确的吗?

timestamp x <= timestamp y
        where
 offset x < offset y

谢谢。