wangzzu / awesome

不积硅步,无以至千里
228 stars 47 forks source link

Kafka 时间戳问题 #19

Closed wangzzu closed 5 years ago

wangzzu commented 6 years ago

简答描述一下问题: kafka topic 中的一个 partition,可以由来自多个 client 来写入。假设这个 topic 的时间戳索引设置的是 create time,在这个 topic 的 prodcuer client 中,有一个 client 网络延迟非常大,这种情况下,可能会遇到当前 partition 时间戳索引记录到100,下面突然来了一个时间戳为90的数据,这时候如果是直接忽略,那么可能导致 server 记录时间戳与 offset 对应不准确,这种情况应该怎么处理。

wangzzu commented 6 years ago

自己对时间戳这个存储有一点误解,现在大概有一点理解了,过程如下:

  1. 时间戳索引只是一个稀疏的索引文件,通过时间戳索引可以找到时间戳对应的大概offset;
  2. 然后再从该 offset 对应的数据文件中遍历每一条记录,找到第一个大于等于这个时间戳的 msg 对应的 offset。

这样的上面的问题是可以解决,但也不是精确解决,除非在 flush 到磁盘前对数据按时间戳严格排序,后续写篇小博文来介绍一下。

wangzzu commented 6 years ago

KafkaAdminClient 使用