资讯详情

资讯详情

Kafka消费者偏移量的确定规则

问题现象关于消费者从哪里开始读,最容易形成的一个误解是:「配置了earliest,消费者就该从头读」。真到线上,行为常常与预期不符。现象一:明明把自动重置策略配成了从最早处开始,重启消费者之后却从上次的位置继续,完全没回溯。现象二:反过来,配置了最新的策略,新起一个消费者却把历史消息全读了一遍。现象三:同一个 topic,两个不同的消费者组表现完全不同——一个从头读,一个只看新消息,配置一模一样。现象四:topic 保留时间设为一小时,生产几条消息后隔一小时再生产几条,此时「最早」的位置不再是 0,而是 5,让人以为元数据出错。现象五:换用不同版本的客户端之后,配置项的值不再被识别,报「invalid value」。现象六:使用了较底层的消费接口,发现每次运行都不沿用上次的位置,而同一个集群上用另一种接口却会,以为两者共享同一套位移存储。原因分析要理清这些现象,关键在于认清一句话:自动重置策略只在「找不到有效位移」时才起作用。位移并不是凭每次启动重新决定的,它会持久化存储。当前支持两种存储位置:Kafka 自身(内部主题)和早期的 ZooKeeper。当一个消费者组已经提交了有效位移时,下次启动会直接读取那份已存储的位移继续消费,根本不会去看自动重置配置。这就是为什么现象一会发生——配了从最早处开始却没回溯,恰恰说明位移存在且有效。现象三的答案也就清楚了:决定行
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →