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

nhn9ugyo  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(547)

当以独占方式从kafka主题中的单个分区读取消息时,其中时间戳配置为摄取(代理)时间,我是否可以假设从该分区检索的所有消息都将始终按照严格的时间戳顺序?

2nbm6dog

2nbm6dog1#

kafka在存储和检索消息时提供排序保证,即消息按发送顺序存储和检索。生产者发送到特定主题分区的消息将按发送顺序追加。也就是说,如果记录m1由与记录m2相同的生产者发送,并且m1首先被发送,那么m1将比m2具有更低的偏移量(以及更低的时间戳),并且在日志中出现得更早。
使用者示例按记录在日志中的存储顺序查看记录。
但是,kafka只提供分区内记录的总顺序,而不是主题中不同分区之间的顺序。但是,如果您需要对记录进行总排序,则可以使用只有一个分区的主题来实现,尽管这意味着每个使用者组只有一个使用者进程(不建议这样做)。使用这个类比,如果您只有一个分区,那么对于您的用例是yes,但是如果有更多分区,那么对于每个分区的排序也是yes,但是不能保证整个主题的排序(多个分区)。

t3irkdon

t3irkdon2#

是的,我说的是一个kafka主题,它被显式地配置为日志附加时间。
我假设,由于代理确定时间戳,并且代理拥有一个特定的分区,所以该分区中的时间戳将反映时间戳顺序。
换言之,在为日志追加时间配置的单个分区中,这是否总是正确的:

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

谢谢。

相关问题