我正在使用 Kafka 来处理一个有 4 个分区的主题。 Kafka 中消息的保留期 (TTL) 默认设置为 7 天。我正在运行一个非流式批处理作业来处理来自 Kafka 的数据,并且在每次处理运行后手动存储 Kafka 偏移量。
以下是处理几天后保存的偏移量的示例:
第 1 天(已保存偏移量):
{
"0": 100,
"1": 110,
"2": 90,
"3": 123
}
第 6 天(已保存偏移量):
{
"0": 20000,
"1": 21000,
"2": 11000,
"3": 17003
}
到第 7 天,Kafka 的保留策略将生效,所有超过 7 天的消息将被自动删除。
我的担忧:
当第 7 天后向 Kafka 生成新数据并且旧消息已被删除时,我想知道偏移量会发生什么情况。
我存储的最后处理的偏移量约为 20000,我想确保第二天从偏移量 20001 开始读取将允许我正确读取新生成的消息,而不会遇到任何问题(例如 Kafka 重用旧偏移量) .
Kafka 不会重用以前不再映射到记录的偏移量。
新记录总是按顺序分配下一个偏移量。因此,如果分区上当前的最后一条记录位于偏移量 20000 处,则该分区上的下一条记录将位于偏移量 20001 处,无论保留或日志压缩如何。